From b0e23909aeed792115ee85547fec4811a0f54ef0 Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 18:53:43 +0800 Subject: [PATCH 01/24] chore: add lint and formatting checks Configure ESLint and Prettier, format source and templates, and run style checks in CI. Synchronize scoped package metadata and the lockfile. --- .github/workflows/ci.yml | 2 + .prettierignore | 8 + .prettierrc.json | 16 + README.md | 78 +- eslint.config.js | 41 + package-lock.json | 1390 ++++++++++++++++++++- package.json | 14 +- src/adapters/foundry.ts | 64 +- src/adapters/hardhat.ts | 73 +- src/bin/sunhat.ts | 16 +- src/cli/parser.ts | 27 +- src/cli/router.ts | 34 +- src/commands/init.ts | 205 ++- src/commands/toolchain.ts | 151 ++- src/errors.ts | 16 +- src/process/spawn.ts | 37 +- src/project/binding.ts | 46 +- src/project/root.ts | 18 +- src/toolchain/releases.ts | 85 +- templates/foundry/README.evm.md | 34 +- templates/foundry/README.tron.md | 32 +- templates/hardhat/README.evm.md | 20 +- templates/hardhat/README.tron.md | 18 +- templates/hardhat/scripts/deploy.ts | 4 +- templates/hardhat/test/Counter.test.ts | 10 +- test/cli.test.js | 309 ++++- test/fixtures/toolchain-download.js | 4 +- test/fixtures/toolchain-install-faults.js | 44 +- test/fixtures/toolchain-install-loader.js | 11 +- test/init-commands.test.js | 443 +++++-- test/template-types.test.js | 71 +- test/toolchain.test.js | 327 ++++- tsconfig.json | 15 +- 33 files changed, 3164 insertions(+), 499 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc.json create mode 100644 eslint.config.js diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cd5a647..b9e128d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,6 +17,8 @@ jobs: node-version: 24.22.1 cache: npm - run: npm ci + - run: npm run lint + - run: npm run format:check - run: npm test - run: npm run test:templates - run: npm run pack:check diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..2ccd9cf --- /dev/null +++ b/.prettierignore @@ -0,0 +1,8 @@ +node_modules/ +dist/ +.sunhat/ +.codex/ +.agents/ +.aws/ +package-lock.json +*.tgz diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..72d7e05 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,16 @@ +{ + "singleQuote": true, + "semi": true, + "endOfLine": "lf", + "plugins": ["prettier-plugin-solidity"], + "overrides": [ + { + "files": "**/*.sol", + "options": { + "tabWidth": 4, + "printWidth": 120, + "singleQuote": false + } + } + ] +} diff --git a/README.md b/README.md index c59ef89..76394f1 100644 --- a/README.md +++ b/README.md @@ -16,11 +16,11 @@ sunhat --help These commands are available without a project binding: -| Command | Purpose | -| --- | --- | -| `sunhat`, `sunhat --help`, `sunhat -h` | Print CLI usage and initialization defaults. | -| `sunhat --version`, `sunhat -V` | Print the version of the invoked Sunhat executable. | -| `sunhat init [options] [path]` | Create a project, or bind an existing project with `--adopt`. | +| Command | Purpose | +| -------------------------------------- | ------------------------------------------------------------- | +| `sunhat`, `sunhat --help`, `sunhat -h` | Print CLI usage and initialization defaults. | +| `sunhat --version`, `sunhat -V` | Print the version of the invoked Sunhat executable. | +| `sunhat init [options] [path]` | Create a project, or bind an existing project with `--adopt`. | All other commands require a valid `sunhat.toml` in the current directory or an ancestor. Run them from the project root or one of its subdirectories. Global Sunhat still resolves Hardhat from the project's dependencies and Foundry from the project's `.sunhat/` toolchain; global installation does not install either framework for the project. @@ -73,42 +73,42 @@ The following lists use a globally installed Sunhat and require the project bind Complete the project dependency installation above first. Hardhat must be declared with an exact version matching the installed Hardhat 2 package. -| Command | Purpose | -| --- | --- | -| `sunhat compile [--force]` | Compile contracts, optionally forcing recompilation. | -| `sunhat test [--grep Counter]` | Run all tests or matching tests. | -| `sunhat run scripts/deploy.ts` | Run the deployment script on the configured network. | -| `sunhat node` | Run the configured Hardhat node task. | -| `sunhat console [--no-compile]` | Open the Hardhat console. | -| `sunhat flatten contracts/Counter.sol` | Print flattened contract source. | -| `sunhat clean` | Remove Hardhat artifacts and cache. | -| `sunhat help [task]` | List native tasks or show help for one task. | -| `sunhat [args...]` | Forward a task registered by an installed plugin. | +| Command | Purpose | +| -------------------------------------- | ---------------------------------------------------- | +| `sunhat compile [--force]` | Compile contracts, optionally forcing recompilation. | +| `sunhat test [--grep Counter]` | Run all tests or matching tests. | +| `sunhat run scripts/deploy.ts` | Run the deployment script on the configured network. | +| `sunhat node` | Run the configured Hardhat node task. | +| `sunhat console [--no-compile]` | Open the Hardhat console. | +| `sunhat flatten contracts/Counter.sol` | Print flattened contract source. | +| `sunhat clean` | Remove Hardhat artifacts and cache. | +| `sunhat help [task]` | List native tasks or show help for one task. | +| `sunhat [args...]` | Forward a task registered by an installed plugin. | ### Foundry projects: EVM and TRON Install the project toolchain with `sunhat toolchain install` before running native commands. The installer requires access to the pinned GitHub release and `tar` on macOS/Linux or PowerShell on Windows. It supports macOS/Linux arm64 and x64, and Windows x64. -| Command | Purpose | Target | -| --- | --- | --- | -| `sunhat toolchain install` | Download and verify the pinned project toolchain. | EVM, TRON | -| `sunhat toolchain check` | Verify the installed binary digests. | EVM, TRON | -| `sunhat toolchain info` | Print the installed toolchain metadata. | EVM, TRON | -| `sunhat build [--sizes]` | Compile contracts and optionally report sizes. | EVM, TRON | -| `sunhat test [-vvv]` | Run tests, optionally with verbose traces. | EVM, TRON | -| `sunhat test --match-contract CounterTest` | Run one test contract. | EVM, TRON | -| `sunhat test --gas-report` | Request the selected toolchain's resource report. | EVM, TRON | -| `sunhat snapshot` | Record resource usage snapshots. | EVM, TRON | -| `sunhat coverage` | Generate a coverage report. | EVM, TRON | -| `sunhat script ` | Run a Foundry script. | EVM, TRON | -| `sunhat create ` | Deploy a contract with the selected toolchain. | EVM, TRON | -| `sunhat clean` | Remove build artifacts and cache. | EVM, TRON | -| `sunhat fmt --check` | Check Solidity formatting. | EVM, TRON | -| `sunhat inspect abi` | Print a contract's ABI. | EVM, TRON | -| `sunhat cast [args...]` | Run Cast from the project toolchain. | EVM, TRON | -| `sunhat anvil [args...]` | Start the project-pinned local EVM node. | EVM only | -| `sunhat chisel [args...]` | Open the project-pinned Solidity REPL. | EVM only | -| `sunhat help [command]` | Show native Forge help. | EVM, TRON | +| Command | Purpose | Target | +| ------------------------------------------ | ------------------------------------------------- | --------- | +| `sunhat toolchain install` | Download and verify the pinned project toolchain. | EVM, TRON | +| `sunhat toolchain check` | Verify the installed binary digests. | EVM, TRON | +| `sunhat toolchain info` | Print the installed toolchain metadata. | EVM, TRON | +| `sunhat build [--sizes]` | Compile contracts and optionally report sizes. | EVM, TRON | +| `sunhat test [-vvv]` | Run tests, optionally with verbose traces. | EVM, TRON | +| `sunhat test --match-contract CounterTest` | Run one test contract. | EVM, TRON | +| `sunhat test --gas-report` | Request the selected toolchain's resource report. | EVM, TRON | +| `sunhat snapshot` | Record resource usage snapshots. | EVM, TRON | +| `sunhat coverage` | Generate a coverage report. | EVM, TRON | +| `sunhat script ` | Run a Foundry script. | EVM, TRON | +| `sunhat create ` | Deploy a contract with the selected toolchain. | EVM, TRON | +| `sunhat clean` | Remove build artifacts and cache. | EVM, TRON | +| `sunhat fmt --check` | Check Solidity formatting. | EVM, TRON | +| `sunhat inspect abi` | Print a contract's ABI. | EVM, TRON | +| `sunhat cast [args...]` | Run Cast from the project toolchain. | EVM, TRON | +| `sunhat anvil [args...]` | Start the project-pinned local EVM node. | EVM only | +| `sunhat chisel [args...]` | Open the project-pinned Solidity REPL. | EVM only | +| `sunhat help [command]` | Show native Forge help. | EVM, TRON | Other native Forge commands are forwarded as `sunhat [args...]`. The `toolchain` commands above are managed by Sunhat only for Foundry bindings; in a Hardhat project, the same arguments are forwarded to Hardhat as a native task. @@ -133,13 +133,17 @@ Child processes receive a structured argv array and run with `shell: false`. The ## Development -Run these commands from a Sunhat source checkout: +Use Node.js 24 for repository development, matching CI. Run these commands from a Sunhat source checkout: ```bash npm install +npm run lint +npm run format:check npm test ``` `npm test` builds Sunhat, initializes all four framework/target combinations, and exercises the commands listed in the generated READMEs, npm scripts, argument forwarding, subdirectory resolution, exit codes, and toolchain rejection paths. Framework executables and download responses are fixtures; the suite does not run Solidity compilers, Docker/TRE, or real deployments. Run `npm run test:templates` to generate fresh Hardhat EVM and TRON projects, install their declared dependencies, and check both with `tsc --noEmit`. This integration suite requires access to the npm registry and checks dependency declarations without enabling `skipLibCheck`. It does not require Docker or a blockchain connection. + +Use `npm run lint:fix` to apply ESLint fixes and `npm run format` to format JavaScript, TypeScript, Solidity templates, JSON, YAML, and Markdown. CI runs both lint and formatting checks. Generated files and local toolchains are excluded. diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..d756752 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,41 @@ +import js from '@eslint/js'; +import { defineConfig, globalIgnores } from 'eslint/config'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +export default defineConfig([ + globalIgnores([ + '**/node_modules/**', + 'dist/**', + '.sunhat/**', + '.codex/**', + '.agents/**', + '.aws/**', + ]), + { + files: ['**/*.{js,ts}'], + languageOptions: { globals: globals.node }, + rules: { + curly: ['error', 'all'], + eqeqeq: ['error', 'always'], + 'no-var': 'error', + 'one-var': ['error', 'never'], + 'prefer-const': 'error', + }, + }, + { + files: ['**/*.js'], + extends: [js.configs.recommended], + }, + { + files: ['**/*.ts'], + extends: [js.configs.recommended, tseslint.configs.recommended], + rules: { + '@typescript-eslint/consistent-type-imports': 'error', + }, + }, + { + files: ['templates/hardhat/test/**/*.ts'], + languageOptions: { globals: globals.mocha }, + }, +]); diff --git a/package-lock.json b/package-lock.json index 5b3dcb1..a23d623 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,24 +1,317 @@ { - "name": "sunhat", + "name": "@sun-protocol/sunhat", "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "sunhat", + "name": "@sun-protocol/sunhat", "version": "2.0.0", "license": "MIT OR Apache-2.0", "bin": { "sunhat": "bin/sunhat.js" }, "devDependencies": { + "@eslint/js": "10.0.1", "@types/node": "22.10.2", - "typescript": "5.7.2" + "eslint": "10.13.0", + "globals": "17.13.0", + "prettier": "3.9.10", + "prettier-plugin-solidity": "2.4.1", + "typescript": "5.7.2", + "typescript-eslint": "8.72.1" }, "engines": { "node": ">=20.11" } }, + "node_modules/@bytecodealliance/preview2-shim": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.19.0.tgz", + "integrity": "sha512-OSUlcM62fXLuzYP0DjBn/SwjKMZ/y/2PMXZ8v5cRiiFcroauntlPRl/oCnx0xYjYiqdYvE0PY50VCNutll0xOw==", + "dev": true, + "license": "(Apache-2.0 WITH LLVM-exception)" + }, + "node_modules/@cacheable/memory": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.2.0.tgz", + "integrity": "sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.5.0", + "@keyv/bigmap": "^1.3.1", + "hookified": "^1.15.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz", + "integrity": "sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.5.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.7.0.tgz", + "integrity": "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.3.tgz", + "integrity": "sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nomicfoundation/slang": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-1.3.8.tgz", + "integrity": "sha512-it0o2vGb56kqOEUiIreLTqEwiWitWDDOiUCWCO3PfzBXD3kkIFLQ3Ly/4xNgCo0LF5xqGECr+DcCNbfspSClPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bytecodealliance/preview2-shim": "^0.19.0" + } + }, + "node_modules/@solidity-parser/parser": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", + "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "22.10.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", @@ -26,7 +319,1023 @@ "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.20.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.72.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.72.1.tgz", + "integrity": "sha512-5CokTWXpmbylfFabsbvHC0CAw3XLaGnoa+nFJX5FR592h/LoZsENUE6p/rg5xvkKrFEXz6pYmgI29AgXc2N3BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.72.1", + "@typescript-eslint/type-utils": "8.72.1", + "@typescript-eslint/utils": "8.72.1", + "@typescript-eslint/visitor-keys": "8.72.1", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.72.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.14.tgz", + "integrity": "sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.72.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.72.1.tgz", + "integrity": "sha512-ZGwZP4OCfyA0AQTpEAMWz+rtX01DRhQWW5hB0ucKDEIX5U7jdmPSaMx94rQfaPAQzIYz2BimOgKOJtjfpRFQ9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.72.1", + "@typescript-eslint/types": "8.72.1", + "@typescript-eslint/typescript-estree": "8.72.1", + "@typescript-eslint/visitor-keys": "8.72.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.72.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.72.1.tgz", + "integrity": "sha512-fAuVMkwdO/huI8nyo/WKnNKf6Gag93S56Rh3Ts5mGcavwSdaN8tRg1gCeIGX8PF+nzp1BjGfO4gHhGzW1J6jTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.72.1", + "@typescript-eslint/types": "^8.72.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.72.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.72.1.tgz", + "integrity": "sha512-lC/t6eMCZZQAAKZEYGL6RDVSuFehpdmMT6h+nJIjIa6oylN/PwDgDVtEIbB7O9xFfZYtZAYLoLlDNWKJhtF+uQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.72.1", + "@typescript-eslint/visitor-keys": "8.72.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.72.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.72.1.tgz", + "integrity": "sha512-e4D5R5vpeAEPBxT2BAzsFQL3sbwyeeeo5+aczgNSRK1V734jE7pTqaGFU+fXapWEQwnZbpFaTn32+Z8DwS6OTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.72.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.72.1.tgz", + "integrity": "sha512-iY2wlmyrXJmx4yxUGP3aYCFF3cA/6ShddOKmLU2dx7LnEykbAM8WThlxZEfd1NddqceF6eJmZUayxx9oKIYNlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.72.1", + "@typescript-eslint/typescript-estree": "8.72.1", + "@typescript-eslint/utils": "8.72.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.72.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.72.1.tgz", + "integrity": "sha512-LmE5IhQet1BWOWEXqBrVtBPsMAOQ6Nzk35d+WLh3mk4EUF33sqlfxjio1MdYeSvKSG5skactKKuixBIKXhL4Rw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.72.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.72.1.tgz", + "integrity": "sha512-DAlUoUV93hIvrtIQLwCbmZQYVZwOMhiHJrOVUUIWicFZaIYjTRqlY3I/NZevfkLmSqkNHRu2qYDcq9lrn16oOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.72.1", + "@typescript-eslint/tsconfig-utils": "8.72.1", + "@typescript-eslint/types": "8.72.1", + "@typescript-eslint/visitor-keys": "8.72.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.72.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.72.1.tgz", + "integrity": "sha512-5v5liypurJBFHCBNqh/RjsymAD+VWcE0djuGY/BUqp5fC3Qn+luWDEksjuTtWjPn6i5zQlUtkZCRG/CYG0yCkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.72.1", + "@typescript-eslint/types": "8.72.1", + "@typescript-eslint/typescript-estree": "8.72.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.72.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.72.1.tgz", + "integrity": "sha512-SB8xqipSzZHUePCCLNeYxqnxq83X61/qzNhjQGbTfjxGZIeOEP7tBgWYX05Tcd6CgE02WdTJnh5b8kMZJ/+bnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.72.1", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.19.0.tgz", + "integrity": "sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.12.tgz", + "integrity": "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/cacheable": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz", + "integrity": "sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/memory": "^2.2.0", + "@cacheable/utils": "^2.5.0", + "hookified": "^1.15.0", + "keyv": "^5.6.0", + "qified": "^0.10.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.13.0.tgz", + "integrity": "sha512-UohDjD4zSzEwhf58M3O7vc/ycc8O1I7dNlhtD0WxE8Px8EHNJKtUwzBqrzeGhisRuv2ag4sAYswszCJRgKXYUg==", + "dev": true, + "license": "MIT", + "workspaces": [ + "packages/*" + ], + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.7.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.3", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "11.1.5 || >11.1.6 <12", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.5", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz", + "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^6.1.23" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "6.1.23", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz", + "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cacheable": "^2.5.0", + "flatted": "^3.4.2", + "hookified": "^1.15.0" + } + }, + "node_modules/flatted": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.13.0.tgz", + "integrity": "sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hashery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", + "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^1.15.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/hookified": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.10.tgz", + "integrity": "sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-solidity": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-2.4.1.tgz", + "integrity": "sha512-12w85zZt9gXgGvLW7nK4h+U6sLY8qa688E+tFDP0Oic9zuM5TSQcWQdcE/RP3dLBuBAbA5yUl6lgXmSnjuRsGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/slang": "1.3.8", + "@solidity-parser/parser": "^0.20.2", + "semver": "^7.8.5" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "prettier": ">=3.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qified": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", + "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^2.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/qified/node_modules/hookified": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", + "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/typescript": { @@ -43,12 +1352,85 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.72.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.72.1.tgz", + "integrity": "sha512-3Li9FfPmQp45nxEtFD1ZCrYFI3cYK5kpyNtmm1H7lMagm8u9sy6PTjy3ytwQZs7KNukOyKFHAZ6z6GjYFeaeXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.72.1", + "@typescript-eslint/parser": "8.72.1", + "@typescript-eslint/typescript-estree": "8.72.1", + "@typescript-eslint/utils": "8.72.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, "node_modules/undici-types": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true, "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index 9af29a6..a705ac3 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "sunhat", + "name": "@sun-protocol/sunhat", "version": "2.0.0", "description": "Project-bound Hardhat and Foundry CLI for EVM and TRON development", "type": "module", @@ -17,6 +17,10 @@ "node": ">=20.11" }, "scripts": { + "lint": "eslint . --max-warnings 0", + "lint:fix": "eslint . --fix --max-warnings 0", + "format": "prettier . --write", + "format:check": "prettier . --check", "build": "npm run clean && tsc -p tsconfig.json", "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"", "test": "npm run build && node --test test/cli.test.js test/init-commands.test.js test/toolchain.test.js", @@ -24,7 +28,13 @@ "pack:check": "npm run build && npm pack --dry-run" }, "devDependencies": { + "@eslint/js": "10.0.1", "@types/node": "22.10.2", - "typescript": "5.7.2" + "eslint": "10.13.0", + "globals": "17.13.0", + "prettier": "3.9.10", + "prettier-plugin-solidity": "2.4.1", + "typescript": "5.7.2", + "typescript-eslint": "8.72.1" } } diff --git a/src/adapters/foundry.ts b/src/adapters/foundry.ts index ad840bd..ba41eef 100644 --- a/src/adapters/foundry.ts +++ b/src/adapters/foundry.ts @@ -7,7 +7,10 @@ import { spawnNative } from '../process/spawn.js'; import { releaseFor } from '../toolchain/releases.js'; type FoundryTool = 'forge' | 'cast' | 'anvil' | 'chisel'; -interface BinaryLock { path: string; sha256: string } +interface BinaryLock { + path: string; + sha256: string; +} export interface ToolchainLock { version: number; target: Target; @@ -18,22 +21,59 @@ export interface ToolchainLock { binaries: Record; } -export async function runFoundry(root: string, target: Target, tool: FoundryTool, args: readonly string[]): Promise { - const lock = loadToolchain(root, target); const binary = lock.binaries[tool]; - if (!binary) return toolchainError(`locked toolchain does not provide ${tool}`); - const projectRoot = realpathSync(root); const executable = realpathSync(resolve(projectRoot, binary.path)); - if (executable !== projectRoot && !executable.startsWith(`${projectRoot}${sep}`)) return toolchainError(`${tool} path escapes the project root`); - const digest = sha256(executable); if (digest !== binary.sha256) return toolchainError(`${tool} digest mismatch: expected ${binary.sha256}, got ${digest}`); +export async function runFoundry( + root: string, + target: Target, + tool: FoundryTool, + args: readonly string[], +): Promise { + const lock = loadToolchain(root, target); + const binary = lock.binaries[tool]; + if (!binary) { + return toolchainError(`locked toolchain does not provide ${tool}`); + } + const projectRoot = realpathSync(root); + const executable = realpathSync(resolve(projectRoot, binary.path)); + if ( + executable !== projectRoot && + !executable.startsWith(`${projectRoot}${sep}`) + ) { + return toolchainError(`${tool} path escapes the project root`); + } + const digest = sha256(executable); + if (digest !== binary.sha256) { + return toolchainError( + `${tool} digest mismatch: expected ${binary.sha256}, got ${digest}`, + ); + } return await spawnNative(executable, args, root); } export function loadToolchain(root: string, target: Target): ToolchainLock { - const path = resolve(root, '.sunhat/toolchain.json'); let lock: ToolchainLock; - try { lock = JSON.parse(readFileSync(path, 'utf8')) as ToolchainLock; } - catch { return toolchainError('Foundry toolchain is not installed; run `sunhat toolchain install`'); } + const path = resolve(root, '.sunhat/toolchain.json'); + let lock: ToolchainLock; + try { + lock = JSON.parse(readFileSync(path, 'utf8')) as ToolchainLock; + } catch { + return toolchainError( + 'Foundry toolchain is not installed; run `sunhat toolchain install`', + ); + } const release = releaseFor(target); - if (lock.version !== 1 || lock.target !== target || lock.source !== release.source || lock.release !== release.release || lock.revision !== release.revision) return toolchainError(`toolchain lock does not match ${release.source}@${release.revision}; reinstall it`); + if ( + lock.version !== 1 || + lock.target !== target || + lock.source !== release.source || + lock.release !== release.release || + lock.revision !== release.revision + ) { + return toolchainError( + `toolchain lock does not match ${release.source}@${release.revision}; reinstall it`, + ); + } return lock; } -export function sha256(path: string): string { return createHash('sha256').update(readFileSync(path)).digest('hex'); } +export function sha256(path: string): string { + return createHash('sha256').update(readFileSync(path)).digest('hex'); +} diff --git a/src/adapters/hardhat.ts b/src/adapters/hardhat.ts index 71c067b..b080ad9 100644 --- a/src/adapters/hardhat.ts +++ b/src/adapters/hardhat.ts @@ -3,20 +3,63 @@ import { dirname, isAbsolute, resolve, sep } from 'node:path'; import { readFileSync, realpathSync } from 'node:fs'; import { toolchainError } from '../errors.js'; import { spawnNative } from '../process/spawn.js'; -interface PackageJson { version?: string; bin?: string | Record } -export async function runHardhat(root: string, args: readonly string[]): Promise { - const require = createRequire(resolve(root, 'package.json')); let manifestPath: string; - try { manifestPath = require.resolve('hardhat/package.json'); } catch { return toolchainError('local Hardhat dependency is missing; install the project lockfile dependencies'); } - const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as PackageJson; - if (!manifest.version?.startsWith('2.')) return toolchainError(`Hardhat 2 is required; resolved ${manifest.version ?? 'unknown'} at ${manifestPath}`); - const project = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8')) as { dependencies?: Record; devDependencies?: Record }; - const expected = project.devDependencies?.hardhat ?? project.dependencies?.hardhat; - if (!expected) return toolchainError('Hardhat must be declared in the project package.json'); - if (expected !== manifest.version) return toolchainError(`Hardhat version mismatch: expected ${expected}, resolved ${manifest.version} at ${manifestPath}`); - const relative = typeof manifest.bin === 'string' ? manifest.bin : manifest.bin?.hardhat; - if (!relative) return toolchainError(`Hardhat package has no hardhat bin entry: ${manifestPath}`); - if (isAbsolute(relative)) return toolchainError('Hardhat bin must be package-relative'); - const packageRoot = realpathSync(dirname(manifestPath)); const entry = realpathSync(resolve(packageRoot, relative)); - if (entry !== packageRoot && !entry.startsWith(`${packageRoot}${sep}`)) return toolchainError('Hardhat bin escapes package root'); +interface PackageJson { + version?: string; + bin?: string | Record; +} +export async function runHardhat( + root: string, + args: readonly string[], +): Promise { + const require = createRequire(resolve(root, 'package.json')); + let manifestPath: string; + try { + manifestPath = require.resolve('hardhat/package.json'); + } catch { + return toolchainError( + 'local Hardhat dependency is missing; install the project lockfile dependencies', + ); + } + const manifest = JSON.parse( + readFileSync(manifestPath, 'utf8'), + ) as PackageJson; + if (!manifest.version?.startsWith('2.')) { + return toolchainError( + `Hardhat 2 is required; resolved ${manifest.version ?? 'unknown'} at ${manifestPath}`, + ); + } + const project = JSON.parse( + readFileSync(resolve(root, 'package.json'), 'utf8'), + ) as { + dependencies?: Record; + devDependencies?: Record; + }; + const expected = + project.devDependencies?.hardhat ?? project.dependencies?.hardhat; + if (!expected) { + return toolchainError( + 'Hardhat must be declared in the project package.json', + ); + } + if (expected !== manifest.version) { + return toolchainError( + `Hardhat version mismatch: expected ${expected}, resolved ${manifest.version} at ${manifestPath}`, + ); + } + const relative = + typeof manifest.bin === 'string' ? manifest.bin : manifest.bin?.hardhat; + if (!relative) { + return toolchainError( + `Hardhat package has no hardhat bin entry: ${manifestPath}`, + ); + } + if (isAbsolute(relative)) { + return toolchainError('Hardhat bin must be package-relative'); + } + const packageRoot = realpathSync(dirname(manifestPath)); + const entry = realpathSync(resolve(packageRoot, relative)); + if (entry !== packageRoot && !entry.startsWith(`${packageRoot}${sep}`)) { + return toolchainError('Hardhat bin escapes package root'); + } return await spawnNative(process.execPath, [entry, ...args], root); } diff --git a/src/bin/sunhat.ts b/src/bin/sunhat.ts index c972d9d..9d3e94b 100644 --- a/src/bin/sunhat.ts +++ b/src/bin/sunhat.ts @@ -2,8 +2,16 @@ import { parse } from '../cli/parser.js'; import { route } from '../cli/router.js'; import { CliError } from '../errors.js'; -try { process.exitCode = await route(parse(process.argv.slice(2))); } -catch (error) { - if (error instanceof CliError) { process.stderr.write(`sunhat: ${error.message}\n`); process.exitCode = error.exitCode; } - else { process.stderr.write(`sunhat: ${error instanceof Error ? error.message : String(error)}\n`); process.exitCode = 6; } +try { + process.exitCode = await route(parse(process.argv.slice(2))); +} catch (error) { + if (error instanceof CliError) { + process.stderr.write(`sunhat: ${error.message}\n`); + process.exitCode = error.exitCode; + } else { + process.stderr.write( + `sunhat: ${error instanceof Error ? error.message : String(error)}\n`, + ); + process.exitCode = 6; + } } diff --git a/src/cli/parser.ts b/src/cli/parser.ts index 8753faf..5ea223a 100644 --- a/src/cli/parser.ts +++ b/src/cli/parser.ts @@ -6,17 +6,32 @@ export type Invocation = | { kind: 'init'; args: string[] } | { kind: 'run'; command: string; args: string[] }; export function parse(argv: readonly string[]): Invocation { - if (argv.length === 0 || (argv.length === 1 && (argv[0] === '-h' || argv[0] === '--help'))) return { kind: 'help' }; - if (argv.length === 1 && (argv[0] === '-V' || argv[0] === '--version')) return { kind: 'version' }; + if ( + argv.length === 0 || + (argv.length === 1 && (argv[0] === '-h' || argv[0] === '--help')) + ) { + return { kind: 'help' }; + } + if (argv.length === 1 && (argv[0] === '-V' || argv[0] === '--version')) { + return { kind: 'version' }; + } const command = argv[0]; - if (!command) return usage('missing command or task'); - if (command === 'init') return { kind: 'init', args: argv.slice(1) }; + if (!command) { + return usage('missing command or task'); + } + if (command === 'init') { + return { kind: 'init', args: argv.slice(1) }; + } if (command === 'hardhat' || command === 'foundry') { - return usage(`framework namespace is no longer supported; run \`sunhat ${argv[1] ?? ''}\` instead`); + return usage( + `framework namespace is no longer supported; run \`sunhat ${argv[1] ?? ''}\` instead`, + ); } return { kind: 'run', command, args: argv.slice(1) }; } export function parseTarget(value: string): Target { - if (value !== 'tron' && value !== 'evm') return usage(`invalid target ${value}; expected tron or evm`); + if (value !== 'tron' && value !== 'evm') { + return usage(`invalid target ${value}; expected tron or evm`); + } return value; } diff --git a/src/cli/router.ts b/src/cli/router.ts index adfc807..8c8128d 100644 --- a/src/cli/router.ts +++ b/src/cli/router.ts @@ -16,19 +16,37 @@ Usage: Init defaults: framework=foundry, target=tron `; export async function route(invocation: Invocation): Promise { - if (invocation.kind === 'help') { process.stdout.write(HELP); return 0; } - if (invocation.kind === 'version') { process.stdout.write('sunhat 2.0.0\n'); return 0; } - if (invocation.kind === 'init') return initProject(invocation.args); - const root = findProjectRoot(process.cwd()); const binding = readBinding(resolve(root, 'sunhat.toml')); - if (binding.framework === 'hardhat') return await runHardhat(root, [invocation.command, ...invocation.args]); - if (invocation.command === 'toolchain') return toolchain(root, binding.target, invocation.args); + if (invocation.kind === 'help') { + process.stdout.write(HELP); + return 0; + } + if (invocation.kind === 'version') { + process.stdout.write('sunhat 2.0.0\n'); + return 0; + } + if (invocation.kind === 'init') { + return initProject(invocation.args); + } + const root = findProjectRoot(process.cwd()); + const binding = readBinding(resolve(root, 'sunhat.toml')); + if (binding.framework === 'hardhat') { + return await runHardhat(root, [invocation.command, ...invocation.args]); + } + if (invocation.command === 'toolchain') { + return toolchain(root, binding.target, invocation.args); + } const command = invocation.command; if (command === 'anvil' || command === 'chisel') { - if (binding.target === 'tron') return usage(`${command} is unsupported for the TRON target`); + if (binding.target === 'tron') { + return usage(`${command} is unsupported for the TRON target`); + } return await runFoundry(root, binding.target, command, invocation.args); } if (command === 'cast') { return await runFoundry(root, binding.target, 'cast', invocation.args); } - return await runFoundry(root, binding.target, 'forge', [command, ...invocation.args]); + return await runFoundry(root, binding.target, 'forge', [ + command, + ...invocation.args, + ]); } diff --git a/src/commands/init.ts b/src/commands/init.ts index 2b4c887..41dbde0 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -5,72 +5,193 @@ import { CliError, usage } from '../errors.js'; import type { Framework, Target } from '../project/binding.js'; import { parseTarget } from '../cli/parser.js'; -interface InitOptions { framework: Framework; target?: Target; path: string; adopt: boolean } +interface InitOptions { + framework: Framework; + target?: Target; + path: string; + adopt: boolean; +} const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); export function initProject(argv: readonly string[]): number { const options = parseOptions(argv); const { framework } = options; - const root = resolve(options.path); mkdirSync(root, { recursive: true }); - if (existsSync(resolve(root, 'sunhat.toml'))) return usage(`${root} is already bound by sunhat.toml`); + const root = resolve(options.path); + mkdirSync(root, { recursive: true }); + if (existsSync(resolve(root, 'sunhat.toml'))) { + return usage(`${root} is already bound by sunhat.toml`); + } const target = options.target ?? 'tron'; - if (options.adopt) validateNativeProject(root, framework); - else scaffold(root, framework, target); - writeExclusive(resolve(root, 'sunhat.toml'), `[project]\nframework = "${framework}"\ntarget = "${target}"\n`); - process.stderr.write(`${options.adopt ? 'adopted' : 'initialized'} ${framework}/${target} project at ${root}\n`); + if (options.adopt) { + validateNativeProject(root, framework); + } else { + scaffold(root, framework, target); + } + writeExclusive( + resolve(root, 'sunhat.toml'), + `[project]\nframework = "${framework}"\ntarget = "${target}"\n`, + ); + process.stderr.write( + `${options.adopt ? 'adopted' : 'initialized'} ${framework}/${target} project at ${root}\n`, + ); return 0; } function parseOptions(argv: readonly string[]): InitOptions { - let framework: Framework = 'foundry'; let target: Target | undefined; let path = '.'; let positional = false; let adopt = false; + let framework: Framework = 'foundry'; + let target: Target | undefined; + let path = '.'; + let positional = false; + let adopt = false; for (let i = 0; i < argv.length; i += 1) { const arg = argv[i]!; if (arg === '--framework') { const value = argv[++i]; - if (value !== 'foundry' && value !== 'hardhat') return usage('--framework requires foundry or hardhat'); + if (value !== 'foundry' && value !== 'hardhat') { + return usage('--framework requires foundry or hardhat'); + } framework = value; + } else if (arg === '--target') { + const value = argv[++i]; + if (!value) { + return usage('--target requires tron or evm'); + } + target = parseTarget(value); + } else if (arg === '--adopt') { + adopt = true; + } else if (arg === '-h' || arg === '--help') { + process.stdout.write( + 'Usage: sunhat init [--framework ] [--target ] [--adopt] [path]\nDefaults: framework=foundry, target=tron\n', + ); + return process.exit(0) as never; + } else if (arg.startsWith('-')) { + return usage(`unknown init option ${arg}`); + } else { + if (positional) { + return usage('init accepts at most one path'); + } + path = arg; + positional = true; } - else if (arg === '--target') { const value = argv[++i]; if (!value) return usage('--target requires tron or evm'); target = parseTarget(value); } - else if (arg === '--adopt') adopt = true; - else if (arg === '-h' || arg === '--help') { process.stdout.write('Usage: sunhat init [--framework ] [--target ] [--adopt] [path]\nDefaults: framework=foundry, target=tron\n'); return process.exit(0) as never; } - else if (arg.startsWith('-')) return usage(`unknown init option ${arg}`); - else { if (positional) return usage('init accepts at most one path'); path = arg; positional = true; } } - return target ? { framework, target, path, adopt } : { framework, path, adopt }; + return target + ? { framework, target, path, adopt } + : { framework, path, adopt }; } function validateNativeProject(root: string, framework: Framework): void { - const found = framework === 'foundry' ? existsSync(resolve(root, 'foundry.toml')) : ['js', 'cjs', 'ts'].some(ext => existsSync(resolve(root, `hardhat.config.${ext}`))); - if (!found) throw new CliError(`cannot adopt ${framework}: native configuration not found in ${root}`, 2); + const found = + framework === 'foundry' + ? existsSync(resolve(root, 'foundry.toml')) + : ['js', 'cjs', 'ts'].some((ext) => + existsSync(resolve(root, `hardhat.config.${ext}`)), + ); + if (!found) { + throw new CliError( + `cannot adopt ${framework}: native configuration not found in ${root}`, + 2, + ); + } } function scaffold(root: string, framework: Framework, target: Target): void { const source = resolve(packageRoot, 'templates', framework); - const destinations = framework === 'hardhat' - ? ['package.json', 'README.md', 'hardhat.config.ts', 'contracts/Counter.sol', 'scripts/deploy.ts', 'test/Counter.test.ts', 'tsconfig.json'] - : ['package.json', 'README.md', 'foundry.toml', 'src/Counter.sol', 'script/Counter.s.sol', 'test/Counter.t.sol']; - const conflict = destinations.find(name => existsSync(resolve(root, name))); - if (conflict) throw new CliError(`refusing to overwrite existing file ${resolve(root, conflict)}`, 2); + const destinations = + framework === 'hardhat' + ? [ + 'package.json', + 'README.md', + 'hardhat.config.ts', + 'contracts/Counter.sol', + 'scripts/deploy.ts', + 'test/Counter.test.ts', + 'tsconfig.json', + ] + : [ + 'package.json', + 'README.md', + 'foundry.toml', + 'src/Counter.sol', + 'script/Counter.s.sol', + 'test/Counter.t.sol', + ]; + const conflict = destinations.find((name) => existsSync(resolve(root, name))); + if (conflict) { + throw new CliError( + `refusing to overwrite existing file ${resolve(root, conflict)}`, + 2, + ); + } if (framework === 'hardhat') { - writeExclusive(resolve(root, 'package.json'), `${JSON.stringify(hardhatPackage(root, target), null, 2)}\n`); - copyExclusive(resolve(source, `README.${target}.md`), resolve(root, 'README.md')); + writeExclusive( + resolve(root, 'package.json'), + `${JSON.stringify(hardhatPackage(root, target), null, 2)}\n`, + ); + copyExclusive( + resolve(source, `README.${target}.md`), + resolve(root, 'README.md'), + ); writeExclusive(resolve(root, 'hardhat.config.ts'), hardhatConfig(target)); - for (const name of ['contracts/Counter.sol', 'scripts/deploy.ts', 'test/Counter.test.ts', 'tsconfig.json']) copyExclusive(resolve(source, name), resolve(root, name)); + for (const name of [ + 'contracts/Counter.sol', + 'scripts/deploy.ts', + 'test/Counter.test.ts', + 'tsconfig.json', + ]) { + copyExclusive(resolve(source, name), resolve(root, name)); + } } else { - writeExclusive(resolve(root, 'package.json'), `${JSON.stringify(foundryPackage(root, target), null, 2)}\n`); - copyExclusive(resolve(source, `README.${target}.md`), resolve(root, 'README.md')); + writeExclusive( + resolve(root, 'package.json'), + `${JSON.stringify(foundryPackage(root, target), null, 2)}\n`, + ); + copyExclusive( + resolve(source, `README.${target}.md`), + resolve(root, 'README.md'), + ); writeExclusive(resolve(root, 'foundry.toml'), foundryConfig(target)); - for (const name of ['src/Counter.sol', 'script/Counter.s.sol', 'test/Counter.t.sol']) copyExclusive(resolve(source, name), resolve(root, name)); + for (const name of [ + 'src/Counter.sol', + 'script/Counter.s.sol', + 'test/Counter.t.sol', + ]) { + copyExclusive(resolve(source, name), resolve(root, name)); + } } } function hardhatPackage(root: string, target: Target): object { - const dependencies: Record = { '@nomicfoundation/hardhat-chai-matchers': '2.0.0', '@nomicfoundation/hardhat-ethers': '3.0.8', '@types/chai': '4.3.0', '@types/mocha': '10.0.0', chai: '4.5.0', ethers: '6.13.0', hardhat: '2.29.1', 'ts-node': '10.9.2', typescript: '5.6.3' }; - if (target === 'tron') dependencies['@openzeppelin/hardhat-tron'] = '0.1.0'; + const dependencies: Record = { + '@nomicfoundation/hardhat-chai-matchers': '2.0.0', + '@nomicfoundation/hardhat-ethers': '3.0.8', + '@types/chai': '4.3.0', + '@types/mocha': '10.0.0', + chai: '4.5.0', + ethers: '6.13.0', + hardhat: '2.29.1', + 'ts-node': '10.9.2', + typescript: '5.6.3', + }; + if (target === 'tron') { + dependencies['@openzeppelin/hardhat-tron'] = '0.1.0'; + } dependencies.sunhat = sunhatDependency(); - return { name: basename(root), version: '0.1.0', private: true, scripts: { build: 'sunhat compile', test: 'sunhat test' }, devDependencies: dependencies }; + return { + name: basename(root), + version: '0.1.0', + private: true, + scripts: { build: 'sunhat compile', test: 'sunhat test' }, + devDependencies: dependencies, + }; } function foundryPackage(root: string, target: Target): object { return { - name: basename(root), version: '0.1.0', private: true, + name: basename(root), + version: '0.1.0', + private: true, scripts: { build: 'sunhat build', test: 'sunhat test' }, devDependencies: { sunhat: sunhatDependency() }, - sunhat: { foundryToolchain: { target, source: target === 'tron' ? 'elsvv/foundry-tron' : 'foundry-rs/foundry' } }, + sunhat: { + foundryToolchain: { + target, + source: target === 'tron' ? 'elsvv/foundry-tron' : 'foundry-rs/foundry', + }, + }, }; } function sunhatDependency(): string { @@ -122,8 +243,20 @@ export default config; `; } function foundryConfig(target: Target): string { - const network = target === 'tron' ? 'network = "tron"\nchain_id = 728126428\nevm_version = "cancun"\n' : ''; + const network = + target === 'tron' + ? 'network = "tron"\nchain_id = 728126428\nevm_version = "cancun"\n' + : ''; return `[profile.default]\nsrc = "src"\nout = "out"\nlibs = ["lib"]\n${network}`; } -function copyExclusive(from: string, to: string): void { writeExclusive(to, readFileSync(from)); } -function writeExclusive(path: string, data: string | Buffer): void { mkdirSync(dirname(path), { recursive: true }); try { writeFileSync(path, data, { flag: 'wx' }); } catch (error) { throw new CliError(`refusing to overwrite existing file ${path}`, 2); } } +function copyExclusive(from: string, to: string): void { + writeExclusive(to, readFileSync(from)); +} +function writeExclusive(path: string, data: string | Buffer): void { + mkdirSync(dirname(path), { recursive: true }); + try { + writeFileSync(path, data, { flag: 'wx' }); + } catch { + throw new CliError(`refusing to overwrite existing file ${path}`, 2); + } +} diff --git a/src/commands/toolchain.ts b/src/commands/toolchain.ts index 7a33b97..03021f2 100644 --- a/src/commands/toolchain.ts +++ b/src/commands/toolchain.ts @@ -1,6 +1,13 @@ import { createHash } from 'node:crypto'; import { execFile } from 'node:child_process'; -import { chmodSync, mkdirSync, mkdtempSync, renameSync, rmSync, writeFileSync } from 'node:fs'; +import { + chmodSync, + mkdirSync, + mkdtempSync, + renameSync, + rmSync, + writeFileSync, +} from 'node:fs'; import { basename, resolve } from 'node:path'; import { promisify } from 'node:util'; import { usage, toolchainError } from '../errors.js'; @@ -10,67 +17,149 @@ import { platformKey, releaseFor, releaseUrl } from '../toolchain/releases.js'; const execFileAsync = promisify(execFile); -export async function toolchain(root: string, target: Target, args: readonly string[]): Promise { +export async function toolchain( + root: string, + target: Target, + args: readonly string[], +): Promise { const command = args[0]; - if (!command || args.length !== 1 || !['install', 'check', 'info'].includes(command)) return usage('toolchain requires exactly one command: install, check or info'); - if (command === 'install') return await install(root, target); + if ( + !command || + args.length !== 1 || + !['install', 'check', 'info'].includes(command) + ) { + return usage( + 'toolchain requires exactly one command: install, check or info', + ); + } + if (command === 'install') { + return await install(root, target); + } const lock = loadToolchain(root, target); - if (command === 'check') for (const [tool, item] of Object.entries(lock.binaries)) if (sha256(resolve(root, item.path)) !== item.sha256) return toolchainError(`${tool} digest mismatch`); - process.stdout.write(`framework=foundry\ntarget=${target}\nsource=${lock.source}\nrelease=${lock.release}\nrevision=${lock.revision}\nplatform=${lock.platform}\n`); + if (command === 'check') { + for (const [tool, item] of Object.entries(lock.binaries)) { + if (sha256(resolve(root, item.path)) !== item.sha256) { + return toolchainError(`${tool} digest mismatch`); + } + } + } + process.stdout.write( + `framework=foundry\ntarget=${target}\nsource=${lock.source}\nrelease=${lock.release}\nrevision=${lock.revision}\nplatform=${lock.platform}\n`, + ); return 0; } async function install(root: string, target: Target): Promise { - const release = releaseFor(target); const url = releaseUrl(release); + const release = releaseFor(target); + const url = releaseUrl(release); const response = await fetch(url, { redirect: 'follow' }); - if (!response.ok) return toolchainError(`download failed (${response.status}): ${url}`); - const bytes = Buffer.from(await response.arrayBuffer()); const digest = createHash('sha256').update(bytes).digest('hex'); - if (digest !== release.sha256) return toolchainError(`archive digest mismatch: expected ${release.sha256}, got ${digest}`); + if (!response.ok) { + return toolchainError(`download failed (${response.status}): ${url}`); + } + const bytes = Buffer.from(await response.arrayBuffer()); + const digest = createHash('sha256').update(bytes).digest('hex'); + if (digest !== release.sha256) { + return toolchainError( + `archive digest mismatch: expected ${release.sha256}, got ${digest}`, + ); + } - const toolchains = resolve(root, '.sunhat/toolchains'); mkdirSync(toolchains, { recursive: true }); + const toolchains = resolve(root, '.sunhat/toolchains'); + mkdirSync(toolchains, { recursive: true }); // Stage beside the destination so every binary/directory rename stays on its filesystem. const temporary = mkdtempSync(resolve(toolchains, `.install-${target}-`)); let lockTemporary: string | undefined; let preserveBackup = false; try { - const archive = resolve(temporary, release.archive); const extracted = resolve(temporary, 'extracted'); mkdirSync(extracted); writeFileSync(archive, bytes); - if (release.archive.endsWith('.zip')) await execFileAsync('powershell.exe', ['-NoProfile', '-Command', `Expand-Archive -LiteralPath '${archive.replaceAll("'", "''")}' -DestinationPath '${extracted.replaceAll("'", "''")}'`]); - else await execFileAsync('tar', ['-xzf', archive, '-C', extracted]); - const prepared = resolve(temporary, 'binaries'); mkdirSync(prepared); + const archive = resolve(temporary, release.archive); + const extracted = resolve(temporary, 'extracted'); + mkdirSync(extracted); + writeFileSync(archive, bytes); + if (release.archive.endsWith('.zip')) { + await execFileAsync('powershell.exe', [ + '-NoProfile', + '-Command', + `Expand-Archive -LiteralPath '${archive.replaceAll("'", "''")}' -DestinationPath '${extracted.replaceAll("'", "''")}'`, + ]); + } else { + await execFileAsync('tar', ['-xzf', archive, '-C', extracted]); + } + const prepared = resolve(temporary, 'binaries'); + mkdirSync(prepared); const binaries: Record = {}; for (const [tool, filename] of Object.entries(release.tools)) { - const source = resolve(extracted, filename); const output = resolve(prepared, basename(filename)); renameSync(source, output); chmodSync(output, 0o755); - binaries[tool] = { path: `.sunhat/toolchains/${target}/${basename(filename)}`, sha256: sha256(output) }; + const source = resolve(extracted, filename); + const output = resolve(prepared, basename(filename)); + renameSync(source, output); + chmodSync(output, 0o755); + binaries[tool] = { + path: `.sunhat/toolchains/${target}/${basename(filename)}`, + sha256: sha256(output), + }; } - const lock = { version: 1, target, source: release.source, release: release.release, revision: release.revision, platform: platformKey(), binaries }; + const lock = { + version: 1, + target, + source: release.source, + release: release.release, + revision: release.revision, + platform: platformKey(), + binaries, + }; // The lock may live on a different mount from toolchains; stage beside it too. lockTemporary = mkdtempSync(resolve(root, '.sunhat/.toolchain-lock-')); const preparedLock = resolve(lockTemporary, 'toolchain.json'); - writeFileSync(preparedLock, `${JSON.stringify(lock, null, 2)}\n`, { flag: 'wx' }); + writeFileSync(preparedLock, `${JSON.stringify(lock, null, 2)}\n`, { + flag: 'wx', + }); - const destination = resolve(toolchains, target); const backup = resolve(temporary, 'previous'); - let backedUp = false; let activated = false; - try { renameSync(destination, backup); backedUp = true; } - catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; } + const destination = resolve(toolchains, target); + const backup = resolve(temporary, 'previous'); + let backedUp = false; + let activated = false; try { - renameSync(prepared, destination); activated = true; + renameSync(destination, backup); + backedUp = true; + } catch (error) { + if ((error as NodeJS.ErrnoException).code !== 'ENOENT') { + throw error; + } + } + try { + renameSync(prepared, destination); + activated = true; renameSync(preparedLock, resolve(root, '.sunhat/toolchain.json')); } catch (error) { try { - if (activated) rmSync(destination, { recursive: true, force: true }); - if (backedUp) renameSync(backup, destination); + if (activated) { + rmSync(destination, { recursive: true, force: true }); + } + if (backedUp) { + renameSync(backup, destination); + } } catch (rollbackError) { // Never remove the only remaining copy when restoring the old directory fails. preserveBackup = backedUp; - return toolchainError(`installation failed: ${errorMessage(error)}; rollback failed: ${errorMessage(rollbackError)}${backedUp ? `; previous toolchain preserved at ${backup}` : ''}`); + return toolchainError( + `installation failed: ${errorMessage(error)}; rollback failed: ${errorMessage(rollbackError)}${backedUp ? `; previous toolchain preserved at ${backup}` : ''}`, + ); } throw error; } - process.stderr.write(`installed ${release.source}@${release.revision} from ${url}\n`); return 0; + process.stderr.write( + `installed ${release.source}@${release.revision} from ${url}\n`, + ); + return 0; } finally { - if (!preserveBackup) rmSync(temporary, { recursive: true, force: true }); - if (lockTemporary) rmSync(lockTemporary, { recursive: true, force: true }); + if (!preserveBackup) { + rmSync(temporary, { recursive: true, force: true }); + } + if (lockTemporary) { + rmSync(lockTemporary, { recursive: true, force: true }); + } } } -function errorMessage(error: unknown): string { return error instanceof Error ? error.message : String(error); } +function errorMessage(error: unknown): string { + return error instanceof Error ? error.message : String(error); +} diff --git a/src/errors.ts b/src/errors.ts index 24b4a46..746fb3a 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -1,5 +1,15 @@ export class CliError extends Error { - constructor(message: string, readonly exitCode = 2) { super(message); this.name = 'CliError'; } + constructor( + message: string, + readonly exitCode = 2, + ) { + super(message); + this.name = 'CliError'; + } +} +export function usage(message: string): never { + throw new CliError(message, 2); +} +export function toolchainError(message: string): never { + throw new CliError(message, 3); } -export function usage(message: string): never { throw new CliError(message, 2); } -export function toolchainError(message: string): never { throw new CliError(message, 3); } diff --git a/src/process/spawn.ts b/src/process/spawn.ts index 6c85caa..d4be5f4 100644 --- a/src/process/spawn.ts +++ b/src/process/spawn.ts @@ -1,11 +1,36 @@ import { spawn } from 'node:child_process'; import { CliError } from '../errors.js'; -export async function spawnNative(executable: string, args: readonly string[], cwd: string): Promise { +export async function spawnNative( + executable: string, + args: readonly string[], + cwd: string, +): Promise { return await new Promise((resolve, reject) => { - const child = spawn(executable, args, { cwd, stdio: 'inherit', shell: false, windowsHide: false }); - const onInt = (): void => { child.kill('SIGINT'); }; const onTerm = (): void => { child.kill('SIGTERM'); }; - process.once('SIGINT', onInt); process.once('SIGTERM', onTerm); - child.once('error', error => reject(new CliError(`failed to start ${executable}: ${error.message}`, 6))); - child.once('exit', (code, signal) => { process.off('SIGINT', onInt); process.off('SIGTERM', onTerm); resolve(code ?? (signal === 'SIGINT' ? 130 : signal === 'SIGTERM' ? 143 : 1)); }); + const child = spawn(executable, args, { + cwd, + stdio: 'inherit', + shell: false, + windowsHide: false, + }); + const onInt = (): void => { + child.kill('SIGINT'); + }; + const onTerm = (): void => { + child.kill('SIGTERM'); + }; + process.once('SIGINT', onInt); + process.once('SIGTERM', onTerm); + child.once('error', (error) => + reject( + new CliError(`failed to start ${executable}: ${error.message}`, 6), + ), + ); + child.once('exit', (code, signal) => { + process.off('SIGINT', onInt); + process.off('SIGTERM', onTerm); + resolve( + code ?? (signal === 'SIGINT' ? 130 : signal === 'SIGTERM' ? 143 : 1), + ); + }); }); } diff --git a/src/project/binding.ts b/src/project/binding.ts index 68005e9..33c3886 100644 --- a/src/project/binding.ts +++ b/src/project/binding.ts @@ -2,25 +2,51 @@ import { readFileSync } from 'node:fs'; import { CliError } from '../errors.js'; export type Framework = 'hardhat' | 'foundry'; export type Target = 'tron' | 'evm'; -export interface Binding { framework: Framework; target: Target } +export interface Binding { + framework: Framework; + target: Target; +} export function readBinding(path: string): Binding { let text: string; - try { text = readFileSync(path, 'utf8'); } catch (error) { throw new CliError(`cannot read ${path}: ${msg(error)}`, 4); } + try { + text = readFileSync(path, 'utf8'); + } catch (error) { + throw new CliError(`cannot read ${path}: ${msg(error)}`, 4); + } let section = ''; const values = new Map(); for (const raw of text.split(/\r?\n/u)) { const line = raw.replace(/\s+#.*$/u, '').trim(); - if (!line) continue; + if (!line) { + continue; + } const header = /^\[(.+)\]$/u.exec(line); - if (header) { section = header[1] ?? ''; continue; } - if (section !== 'project') continue; + if (header) { + section = header[1] ?? ''; + continue; + } + if (section !== 'project') { + continue; + } const assignment = /^(framework|target)\s*=\s*"([^"]+)"\s*$/u.exec(line); - if (!assignment) throw new CliError(`invalid project binding in ${path}: ${line}`, 4); + if (!assignment) { + throw new CliError(`invalid project binding in ${path}: ${line}`, 4); + } values.set(assignment[1]!, assignment[2]!); } - const framework = values.get('framework'); const target = values.get('target'); - if (framework !== 'hardhat' && framework !== 'foundry') throw new CliError(`invalid framework in ${path}; expected hardhat or foundry`, 4); - if (target !== 'tron' && target !== 'evm') throw new CliError(`invalid target in ${path}; expected tron or evm`, 4); + const framework = values.get('framework'); + const target = values.get('target'); + if (framework !== 'hardhat' && framework !== 'foundry') { + throw new CliError( + `invalid framework in ${path}; expected hardhat or foundry`, + 4, + ); + } + if (target !== 'tron' && target !== 'evm') { + throw new CliError(`invalid target in ${path}; expected tron or evm`, 4); + } return { framework, target }; } -function msg(error: unknown): string { return error instanceof Error ? error.message : String(error); } +function msg(error: unknown): string { + return error instanceof Error ? error.message : String(error); +} diff --git a/src/project/root.ts b/src/project/root.ts index 21a5088..ce8a6af 100644 --- a/src/project/root.ts +++ b/src/project/root.ts @@ -2,7 +2,19 @@ import { existsSync } from 'node:fs'; import { dirname, parse, resolve } from 'node:path'; import { CliError } from '../errors.js'; export function findProjectRoot(start: string): string { - let current = resolve(start); const filesystemRoot = parse(current).root; - for (;;) { if (existsSync(resolve(current, 'sunhat.toml'))) return current; if (current === filesystemRoot) break; current = dirname(current); } - throw new CliError('sunhat.toml not found; initialize with `sunhat init` or adopt with `sunhat init --adopt`', 4); + let current = resolve(start); + const filesystemRoot = parse(current).root; + for (;;) { + if (existsSync(resolve(current, 'sunhat.toml'))) { + return current; + } + if (current === filesystemRoot) { + break; + } + current = dirname(current); + } + throw new CliError( + 'sunhat.toml not found; initialize with `sunhat init` or adopt with `sunhat init --adopt`', + 4, + ); } diff --git a/src/toolchain/releases.ts b/src/toolchain/releases.ts index 9bac4ff..6820b31 100644 --- a/src/toolchain/releases.ts +++ b/src/toolchain/releases.ts @@ -1,26 +1,85 @@ import type { Target } from '../project/binding.js'; import { toolchainError } from '../errors.js'; -export interface Release { source: string; release: string; revision: string; archive: string; sha256: string; tools: Record<'forge' | 'cast' | 'anvil' | 'chisel', string> } -type Platform = 'darwin-arm64' | 'darwin-amd64' | 'linux-arm64' | 'linux-amd64' | 'win32-amd64'; +export interface Release { + source: string; + release: string; + revision: string; + archive: string; + sha256: string; + tools: Record<'forge' | 'cast' | 'anvil' | 'chisel', string>; +} +type Platform = + | 'darwin-arm64' + | 'darwin-amd64' + | 'linux-arm64' + | 'linux-amd64' + | 'win32-amd64'; const EVM_SHA: Record = { - 'darwin-arm64': 'd6bc05ee937b4308bded496068728c8ba140abe49dd7527f37e025bc335b91ec', 'darwin-amd64': 'c0b032cdfda5fdce75ab6b782785f3f28aaf431bd55daecfb6437d01369f235e', - 'linux-arm64': 'ca61f3f6e7d635f34e3e174409964d29126fa135794cd84cead8919dd50e0930', 'linux-amd64': '58850106984038f3a7200f38a4182c8cb423d3a4f4c7848eacbc2453e6bc35fc', - 'win32-amd64': '924d6395786af438e7cb315f6835185f99d727ed6127dbbc4e6a62eb14edcfff', + 'darwin-arm64': + 'd6bc05ee937b4308bded496068728c8ba140abe49dd7527f37e025bc335b91ec', + 'darwin-amd64': + 'c0b032cdfda5fdce75ab6b782785f3f28aaf431bd55daecfb6437d01369f235e', + 'linux-arm64': + 'ca61f3f6e7d635f34e3e174409964d29126fa135794cd84cead8919dd50e0930', + 'linux-amd64': + '58850106984038f3a7200f38a4182c8cb423d3a4f4c7848eacbc2453e6bc35fc', + 'win32-amd64': + '924d6395786af438e7cb315f6835185f99d727ed6127dbbc4e6a62eb14edcfff', }; const TRON_SHA: Record = { - 'darwin-arm64': 'b40d08504352475c937cc66bd69eacd35f9ac580abd55d5b294e5cbd0e23cf31', 'darwin-amd64': 'dc2c3f22ec2292885d41617105a5356946bf3efa1d9736ea5d5fd68b802a937a', - 'linux-arm64': '4f2dbe50848d21708e44b2dde168298fa468d8fed0a6ebca0fe9e22ad0f0c27c', 'linux-amd64': '7d684c883b72cc407fef77eab90c9304b5bdd310a465f18e8fd199e595e04331', - 'win32-amd64': 'c257cef8478334544521e3d6f1da58eaecc21ece8b404dea96831156d9979cc4', + 'darwin-arm64': + 'b40d08504352475c937cc66bd69eacd35f9ac580abd55d5b294e5cbd0e23cf31', + 'darwin-amd64': + 'dc2c3f22ec2292885d41617105a5356946bf3efa1d9736ea5d5fd68b802a937a', + 'linux-arm64': + '4f2dbe50848d21708e44b2dde168298fa468d8fed0a6ebca0fe9e22ad0f0c27c', + 'linux-amd64': + '7d684c883b72cc407fef77eab90c9304b5bdd310a465f18e8fd199e595e04331', + 'win32-amd64': + 'c257cef8478334544521e3d6f1da58eaecc21ece8b404dea96831156d9979cc4', }; export function platformKey(): Platform { const key = `${process.platform}-${process.arch === 'x64' ? 'amd64' : process.arch}`; - if (!(key in EVM_SHA)) return toolchainError(`unsupported Foundry platform ${process.platform}-${process.arch}`); + if (!(key in EVM_SHA)) { + return toolchainError( + `unsupported Foundry platform ${process.platform}-${process.arch}`, + ); + } return key as Platform; } export function releaseFor(target: Target): Release { - const platform = platformKey(); const extension = platform.startsWith('win32') ? 'zip' : 'tar.gz'; + const platform = platformKey(); + const extension = platform.startsWith('win32') ? 'zip' : 'tar.gz'; const executableExtension = platform.startsWith('win32') ? '.exe' : ''; - if (target === 'evm') return { source: 'foundry-rs/foundry', release: 'v1.8.6', revision: 'v1.8.6', archive: `foundry_v1.8.6_${platform.replace('-', '_')}.${extension}`, sha256: EVM_SHA[platform], tools: { forge: `forge${executableExtension}`, cast: `cast${executableExtension}`, anvil: `anvil${executableExtension}`, chisel: `chisel${executableExtension}` } }; - return { source: 'elsvv/foundry-tron', release: 'foundry-tron-latest', revision: '9ea07db4b342fd606f6f7c3f99be1757e90d5e90', archive: `foundry-tron_${platform.replace('-', '_')}.${extension}`, sha256: TRON_SHA[platform], tools: { forge: `forge-tron${executableExtension}`, cast: `cast-tron${executableExtension}`, anvil: `anvil-tron${executableExtension}`, chisel: `chisel-tron${executableExtension}` } }; + if (target === 'evm') { + return { + source: 'foundry-rs/foundry', + release: 'v1.8.6', + revision: 'v1.8.6', + archive: `foundry_v1.8.6_${platform.replace('-', '_')}.${extension}`, + sha256: EVM_SHA[platform], + tools: { + forge: `forge${executableExtension}`, + cast: `cast${executableExtension}`, + anvil: `anvil${executableExtension}`, + chisel: `chisel${executableExtension}`, + }, + }; + } + return { + source: 'elsvv/foundry-tron', + release: 'foundry-tron-latest', + revision: '9ea07db4b342fd606f6f7c3f99be1757e90d5e90', + archive: `foundry-tron_${platform.replace('-', '_')}.${extension}`, + sha256: TRON_SHA[platform], + tools: { + forge: `forge-tron${executableExtension}`, + cast: `cast-tron${executableExtension}`, + anvil: `anvil-tron${executableExtension}`, + chisel: `chisel-tron${executableExtension}`, + }, + }; +} +export function releaseUrl(release: Release): string { + return `https://github.com/${release.source}/releases/download/${release.release}/${release.archive}`; } -export function releaseUrl(release: Release): string { return `https://github.com/${release.source}/releases/download/${release.release}/${release.archive}`; } diff --git a/templates/foundry/README.evm.md b/templates/foundry/README.evm.md index 8bec7c2..bc0a68f 100644 --- a/templates/foundry/README.evm.md +++ b/templates/foundry/README.evm.md @@ -31,22 +31,22 @@ The install command replaces the scaffold's `file:` Sunhat reference with the np ## Commands -| Command | Purpose | -| --- | --- | -| `npm run build` | Compile contracts with `sunhat build`. | -| `npm test` | Run the Foundry test suite with `sunhat test`. | -| `sunhat build --sizes` | Compile contracts and report contract sizes. | -| `sunhat test -vvv` | Run tests with verbose traces. | -| `sunhat test --match-contract CounterTest` | Run one test contract. | -| `sunhat snapshot` | Record gas snapshots. | -| `sunhat coverage` | Generate a coverage report. | -| `sunhat script ` | Run a Foundry script. | -| `sunhat create ` | Deploy a contract with Forge. | -| `sunhat cast ` | Run a Cast command through the selected toolchain. | -| `sunhat anvil` | Start the project-pinned Anvil node. | -| `sunhat chisel` | Start the project-pinned Solidity REPL. | -| `sunhat toolchain install` | Download and verify the pinned project toolchain. | -| `sunhat toolchain info` | Print the pinned toolchain metadata. | -| `sunhat toolchain check` | Verify the installed binary digests. | +| Command | Purpose | +| ------------------------------------------ | -------------------------------------------------- | +| `npm run build` | Compile contracts with `sunhat build`. | +| `npm test` | Run the Foundry test suite with `sunhat test`. | +| `sunhat build --sizes` | Compile contracts and report contract sizes. | +| `sunhat test -vvv` | Run tests with verbose traces. | +| `sunhat test --match-contract CounterTest` | Run one test contract. | +| `sunhat snapshot` | Record gas snapshots. | +| `sunhat coverage` | Generate a coverage report. | +| `sunhat script ` | Run a Foundry script. | +| `sunhat create ` | Deploy a contract with Forge. | +| `sunhat cast ` | Run a Cast command through the selected toolchain. | +| `sunhat anvil` | Start the project-pinned Anvil node. | +| `sunhat chisel` | Start the project-pinned Solidity REPL. | +| `sunhat toolchain install` | Download and verify the pinned project toolchain. | +| `sunhat toolchain info` | Print the pinned toolchain metadata. | +| `sunhat toolchain check` | Verify the installed binary digests. | Arguments after the Sunhat command are passed to Foundry unchanged. diff --git a/templates/foundry/README.tron.md b/templates/foundry/README.tron.md index f77a201..119255f 100644 --- a/templates/foundry/README.tron.md +++ b/templates/foundry/README.tron.md @@ -31,22 +31,22 @@ The install command replaces the scaffold's `file:` Sunhat reference with the np ## Commands -| Command | Purpose | -| --- | --- | -| `npm run build` | Compile contracts with `sunhat build`. | -| `npm test` | Run tests on the TRON execution path with `sunhat test`. | -| `sunhat build --sizes` | Compile contracts and report contract sizes. | -| `sunhat test -vvv` | Run tests with verbose traces. | -| `sunhat test --match-contract CounterTest` | Run one test contract. | -| `sunhat test --gas-report` | Report energy and bandwidth usage. | -| `sunhat snapshot` | Record energy snapshots. | -| `sunhat coverage` | Generate a coverage report. | -| `sunhat script ` | Run a Foundry script. | -| `sunhat create ` | Deploy a contract through the TRON transaction path. | -| `sunhat cast ` | Run a Cast command through Foundry-TRON. | -| `sunhat toolchain install` | Download and verify the pinned project toolchain. | -| `sunhat toolchain info` | Print the pinned toolchain metadata. | -| `sunhat toolchain check` | Verify the installed binary digests. | +| Command | Purpose | +| ------------------------------------------ | -------------------------------------------------------- | +| `npm run build` | Compile contracts with `sunhat build`. | +| `npm test` | Run tests on the TRON execution path with `sunhat test`. | +| `sunhat build --sizes` | Compile contracts and report contract sizes. | +| `sunhat test -vvv` | Run tests with verbose traces. | +| `sunhat test --match-contract CounterTest` | Run one test contract. | +| `sunhat test --gas-report` | Report energy and bandwidth usage. | +| `sunhat snapshot` | Record energy snapshots. | +| `sunhat coverage` | Generate a coverage report. | +| `sunhat script ` | Run a Foundry script. | +| `sunhat create ` | Deploy a contract through the TRON transaction path. | +| `sunhat cast ` | Run a Cast command through Foundry-TRON. | +| `sunhat toolchain install` | Download and verify the pinned project toolchain. | +| `sunhat toolchain info` | Print the pinned toolchain metadata. | +| `sunhat toolchain check` | Verify the installed binary digests. | Arguments after the Sunhat command are passed to Foundry-TRON unchanged. diff --git a/templates/hardhat/README.evm.md b/templates/hardhat/README.evm.md index 4c3e6c4..1ba0e10 100644 --- a/templates/hardhat/README.evm.md +++ b/templates/hardhat/README.evm.md @@ -27,15 +27,15 @@ The install command replaces the scaffold's `file:` Sunhat reference with the np ## Commands -| Command | Purpose | -| --- | --- | -| `npm run build` | Compile contracts with `sunhat compile`. | -| `npm test` | Run the Hardhat test suite with `sunhat test`. | -| `sunhat compile --force` | Recompile all contracts. | -| `sunhat test --grep Counter` | Run matching tests. | -| `sunhat node` | Start the configured local EVM network. | -| `sunhat run scripts/deploy.ts` | Run the deployment script. | -| `sunhat clean` | Remove generated Hardhat artifacts and cache files. | -| `sunhat ` | Run a task registered by a Hardhat plugin. | +| Command | Purpose | +| ------------------------------ | --------------------------------------------------- | +| `npm run build` | Compile contracts with `sunhat compile`. | +| `npm test` | Run the Hardhat test suite with `sunhat test`. | +| `sunhat compile --force` | Recompile all contracts. | +| `sunhat test --grep Counter` | Run matching tests. | +| `sunhat node` | Start the configured local EVM network. | +| `sunhat run scripts/deploy.ts` | Run the deployment script. | +| `sunhat clean` | Remove generated Hardhat artifacts and cache files. | +| `sunhat ` | Run a task registered by a Hardhat plugin. | Arguments after the Sunhat command are passed to Hardhat unchanged. diff --git a/templates/hardhat/README.tron.md b/templates/hardhat/README.tron.md index 4df4923..7ba97cb 100644 --- a/templates/hardhat/README.tron.md +++ b/templates/hardhat/README.tron.md @@ -31,16 +31,16 @@ The generated configuration selects the `tre` network and compiles contracts wit ## Commands -| Command | Purpose | -| --- | --- | -| `npm run build` | Compile TRON contracts with `sunhat compile`. | -| `npm test` | Run the test suite against TRE with `sunhat test`. | -| `sunhat compile --force` | Recompile all contracts with `tron-solc`. | -| `sunhat test --grep Counter` | Run matching tests against TRE. | -| `sunhat node` | Run the configured Hardhat task. | +| Command | Purpose | +| ------------------------------ | ---------------------------------------------------- | +| `npm run build` | Compile TRON contracts with `sunhat compile`. | +| `npm test` | Run the test suite against TRE with `sunhat test`. | +| `sunhat compile --force` | Recompile all contracts with `tron-solc`. | +| `sunhat test --grep Counter` | Run matching tests against TRE. | +| `sunhat node` | Run the configured Hardhat task. | | `sunhat run scripts/deploy.ts` | Run the deployment script on the configured network. | -| `sunhat clean` | Remove generated Hardhat artifacts and cache files. | -| `sunhat ` | Run a task registered by a Hardhat plugin. | +| `sunhat clean` | Remove generated Hardhat artifacts and cache files. | +| `sunhat ` | Run a task registered by a Hardhat plugin. | Arguments after the Sunhat command are passed to Hardhat unchanged. diff --git a/templates/hardhat/scripts/deploy.ts b/templates/hardhat/scripts/deploy.ts index 070bd31..82fa59f 100644 --- a/templates/hardhat/scripts/deploy.ts +++ b/templates/hardhat/scripts/deploy.ts @@ -1,7 +1,7 @@ -import { ethers } from "hardhat"; +import { ethers } from 'hardhat'; async function main(): Promise { - const counter = await ethers.deployContract("Counter"); + const counter = await ethers.deployContract('Counter'); await counter.waitForDeployment(); console.log(await counter.getAddress()); } diff --git a/templates/hardhat/test/Counter.test.ts b/templates/hardhat/test/Counter.test.ts index 5a6ad6a..8972d71 100644 --- a/templates/hardhat/test/Counter.test.ts +++ b/templates/hardhat/test/Counter.test.ts @@ -1,9 +1,9 @@ -import { expect } from "chai"; -import { ethers } from "hardhat"; +import { expect } from 'chai'; +import { ethers } from 'hardhat'; -describe("Counter", function () { - it("increments", async function () { - const counter = await ethers.deployContract("Counter"); +describe('Counter', function () { + it('increments', async function () { + const counter = await ethers.deployContract('Counter'); await (await counter.increment()).wait(); expect(await counter.number()).to.equal(1n); }); diff --git a/test/cli.test.js b/test/cli.test.js index 16a1464..2083ff8 100644 --- a/test/cli.test.js +++ b/test/cli.test.js @@ -1,50 +1,143 @@ import assert from 'node:assert/strict'; import { createHash } from 'node:crypto'; -import { chmodSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync } from 'node:fs'; +import { + chmodSync, + mkdirSync, + mkdtempSync, + readFileSync, + writeFileSync, +} from 'node:fs'; import { tmpdir } from 'node:os'; import { dirname, resolve } from 'node:path'; import { spawnSync } from 'node:child_process'; import test from 'node:test'; const cli = resolve('bin/sunhat.js'); -function temp(name) { return mkdtempSync(resolve(tmpdir(), `sunhat-${name}-`)); } -function run(cwd, args) { return spawnSync(process.execPath, [cli, ...args], { cwd, encoding: 'utf8' }); } -function json(path, value) { mkdirSync(dirname(path), { recursive: true }); writeFileSync(path, `${JSON.stringify(value)}\n`); } +function temp(name) { + return mkdtempSync(resolve(tmpdir(), `sunhat-${name}-`)); +} +function run(cwd, args) { + return spawnSync(process.execPath, [cli, ...args], { cwd, encoding: 'utf8' }); +} +function json(path, value) { + mkdirSync(dirname(path), { recursive: true }); + writeFileSync(path, `${JSON.stringify(value)}\n`); +} function binding(root, framework, target) { - writeFileSync(resolve(root, 'sunhat.toml'), `[project]\nframework = "${framework}"\ntarget = "${target}"\n`); - json(resolve(root, 'package.json'), { private: true, devDependencies: framework === 'hardhat' ? { hardhat: '2.22.0' } : {} }); + writeFileSync( + resolve(root, 'sunhat.toml'), + `[project]\nframework = "${framework}"\ntarget = "${target}"\n`, + ); + json(resolve(root, 'package.json'), { + private: true, + devDependencies: framework === 'hardhat' ? { hardhat: '2.22.0' } : {}, + }); +} +function executable(path, body) { + mkdirSync(dirname(path), { recursive: true }); + writeFileSync(path, `#!/usr/bin/env node\n${body}\n`); + chmodSync(path, 0o755); } -function executable(path, body) { mkdirSync(dirname(path), { recursive: true }); writeFileSync(path, `#!/usr/bin/env node\n${body}\n`); chmodSync(path, 0o755); } function hardhat(root, version = '2.22.0') { - const base = resolve(root, 'node_modules/hardhat'); json(resolve(base, 'package.json'), { name: 'hardhat', version, bin: { hardhat: 'cli.js' } }); - executable(resolve(base, 'cli.js'), `process.stdout.write(JSON.stringify(process.argv.slice(2))); process.exitCode = 17;`); + const base = resolve(root, 'node_modules/hardhat'); + json(resolve(base, 'package.json'), { + name: 'hardhat', + version, + bin: { hardhat: 'cli.js' }, + }); + executable( + resolve(base, 'cli.js'), + `process.stdout.write(JSON.stringify(process.argv.slice(2))); process.exitCode = 17;`, + ); } function foundry(root, target) { - const base = resolve(root, `.sunhat/toolchains/${target}`); const binaries = {}; - for (const tool of ['forge', 'cast', 'anvil', 'chisel']) { const path = resolve(base, tool); executable(path, `process.stdout.write('${tool}:'+JSON.stringify(process.argv.slice(2)));`); binaries[tool] = { path: `.sunhat/toolchains/${target}/${tool}`, sha256: createHash('sha256').update(readFileSync(path)).digest('hex') }; } - json(resolve(root, '.sunhat/toolchain.json'), { version: 1, target, source: target === 'evm' ? 'foundry-rs/foundry' : 'elsvv/foundry-tron', release: target === 'evm' ? 'v1.8.6' : 'foundry-tron-latest', revision: target === 'evm' ? 'v1.8.6' : '9ea07db4b342fd606f6f7c3f99be1757e90d5e90', platform: 'test', binaries }); + const base = resolve(root, `.sunhat/toolchains/${target}`); + const binaries = {}; + for (const tool of ['forge', 'cast', 'anvil', 'chisel']) { + const path = resolve(base, tool); + executable( + path, + `process.stdout.write('${tool}:'+JSON.stringify(process.argv.slice(2)));`, + ); + binaries[tool] = { + path: `.sunhat/toolchains/${target}/${tool}`, + sha256: createHash('sha256').update(readFileSync(path)).digest('hex'), + }; + } + json(resolve(root, '.sunhat/toolchain.json'), { + version: 1, + target, + source: target === 'evm' ? 'foundry-rs/foundry' : 'elsvv/foundry-tron', + release: target === 'evm' ? 'v1.8.6' : 'foundry-tron-latest', + revision: + target === 'evm' ? 'v1.8.6' : '9ea07db4b342fd606f6f7c3f99be1757e90d5e90', + platform: 'test', + binaries, + }); } test('init defaults to Foundry and TRON', () => { - const root = temp('default-foundry'); const result = run(dirname(root), ['init', root]); assert.equal(result.status, 0, result.stderr); - assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /framework = "foundry"/u); - assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /target = "tron"/u); - assert.match(readFileSync(resolve(root, 'foundry.toml'), 'utf8'), /network = "tron"/u); - assert.equal(JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8')).scripts.build, 'sunhat build'); + const root = temp('default-foundry'); + const result = run(dirname(root), ['init', root]); + assert.equal(result.status, 0, result.stderr); + assert.match( + readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), + /framework = "foundry"/u, + ); + assert.match( + readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), + /target = "tron"/u, + ); + assert.match( + readFileSync(resolve(root, 'foundry.toml'), 'utf8'), + /network = "tron"/u, + ); + assert.equal( + JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8')).scripts + .build, + 'sunhat build', + ); const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); assert.match(readme, /Foundry TRON Project with Sunhat/u); }); test('init accepts an explicit Foundry EVM target', () => { - const root = temp('explicit-foundry'); const result = run(dirname(root), ['init', '--framework', 'foundry', '--target', 'evm', root]); assert.equal(result.status, 0, result.stderr); - assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /framework = "foundry"/u); - assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /target = "evm"/u); + const root = temp('explicit-foundry'); + const result = run(dirname(root), [ + 'init', + '--framework', + 'foundry', + '--target', + 'evm', + root, + ]); + assert.equal(result.status, 0, result.stderr); + assert.match( + readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), + /framework = "foundry"/u, + ); + assert.match( + readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), + /target = "evm"/u, + ); const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); assert.match(readme, /Foundry EVM Project with Sunhat/u); assert.doesNotMatch(readme, /network = "tron"/u); }); test('Hardhat scaffold requires explicit framework and refuses overwrite', () => { - const root = temp('init'); const result = run(dirname(root), ['init', '--framework', 'hardhat', '--target', 'evm', root]); assert.equal(result.status, 0, result.stderr); - assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /framework = "hardhat"/u); + const root = temp('init'); + const result = run(dirname(root), [ + 'init', + '--framework', + 'hardhat', + '--target', + 'evm', + root, + ]); + assert.equal(result.status, 0, result.stderr); + assert.match( + readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), + /framework = "hardhat"/u, + ); const pkg = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8')); assert.doesNotMatch(JSON.stringify(pkg), /hardhat-tron/u); assert.equal(pkg.devDependencies.sunhat, `file:${process.cwd()}`); @@ -52,13 +145,31 @@ test('Hardhat scaffold requires explicit framework and refuses overwrite', () => const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); assert.match(readme, /Hardhat EVM Project with Sunhat/u); assert.doesNotMatch(readme, /TRE_URL/u); - assert.equal(run(dirname(root), ['init', '--framework', 'hardhat', '--target', 'evm', root]).status, 2); + assert.equal( + run(dirname(root), [ + 'init', + '--framework', + 'hardhat', + '--target', + 'evm', + root, + ]).status, + 2, + ); }); test('TRON Hardhat scaffold selects TRE and loads its ethers bridge last', () => { - const root = temp('hardhat-tron'); const result = run(dirname(root), ['init', '--framework', 'hardhat', root]); assert.equal(result.status, 0, result.stderr); - assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /target = "tron"/u); + const root = temp('hardhat-tron'); + const result = run(dirname(root), ['init', '--framework', 'hardhat', root]); + assert.equal(result.status, 0, result.stderr); + assert.match( + readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), + /target = "tron"/u, + ); const config = readFileSync(resolve(root, 'hardhat.config.ts'), 'utf8'); - assert.ok(config.indexOf('@nomicfoundation/hardhat-ethers') < config.indexOf('@openzeppelin/hardhat-tron')); + assert.ok( + config.indexOf('@nomicfoundation/hardhat-ethers') < + config.indexOf('@openzeppelin/hardhat-tron'), + ); assert.match(config, /defaultNetwork: "tre"/u); assert.match(config, /tron: true/u); assert.match(config, /compiler: \{ target: "tron" \}/u); @@ -67,47 +178,141 @@ test('TRON Hardhat scaffold selects TRE and loads its ethers bridge last', () => assert.match(readme, /Hardhat TRON Project with Sunhat/u); assert.match(readme, /TRE_URL/u); }); -test('init rejects an invalid framework', () => { const result = run(temp('framework'), ['init', '--framework', 'unknown', '--target', 'evm']); assert.equal(result.status, 2); assert.match(result.stderr, /framework requires foundry or hardhat/u); }); +test('init rejects an invalid framework', () => { + const result = run(temp('framework'), [ + 'init', + '--framework', + 'unknown', + '--target', + 'evm', + ]); + assert.equal(result.status, 2); + assert.match(result.stderr, /framework requires foundry or hardhat/u); +}); test('help reports the TRON target default', () => { - const result = run(temp('help'), ['init', '--help']); assert.equal(result.status, 0, result.stderr); assert.match(result.stdout, /target=tron/u); + const result = run(temp('help'), ['init', '--help']); + assert.equal(result.status, 0, result.stderr); + assert.match(result.stdout, /target=tron/u); }); test('scaffold conflict is detected before any write', () => { - const root = temp('atomic'); mkdirSync(resolve(root, 'contracts')); writeFileSync(resolve(root, 'contracts/Counter.sol'), 'owned'); - const result = run(dirname(root), ['init', '--framework', 'hardhat', '--target', 'evm', root]); assert.equal(result.status, 2); - assert.equal(readFileSync(resolve(root, 'contracts/Counter.sol'), 'utf8'), 'owned'); assert.throws(() => readFileSync(resolve(root, 'package.json'))); + const root = temp('atomic'); + mkdirSync(resolve(root, 'contracts')); + writeFileSync(resolve(root, 'contracts/Counter.sol'), 'owned'); + const result = run(dirname(root), [ + 'init', + '--framework', + 'hardhat', + '--target', + 'evm', + root, + ]); + assert.equal(result.status, 2); + assert.equal( + readFileSync(resolve(root, 'contracts/Counter.sol'), 'utf8'), + 'owned', + ); + assert.throws(() => readFileSync(resolve(root, 'package.json'))); }); test('foundry scaffold does not reference unpublished placeholder packages', () => { - const root = temp('foundry-init'); const result = run(dirname(root), ['init', root]); assert.equal(result.status, 0, result.stderr); - const pkg = readFileSync(resolve(root, 'package.json'), 'utf8'); assert.doesNotMatch(pkg, /@sunhat\/foundry-tron-toolchain/u); assert.match(pkg, /elsvv\/foundry-tron/u); - assert.doesNotMatch(readFileSync(resolve(root, 'script/Counter.s.sol'), 'utf8'), /forge-std/u); - assert.doesNotMatch(readFileSync(resolve(root, 'test/Counter.t.sol'), 'utf8'), /forge-std/u); + const root = temp('foundry-init'); + const result = run(dirname(root), ['init', root]); + assert.equal(result.status, 0, result.stderr); + const pkg = readFileSync(resolve(root, 'package.json'), 'utf8'); + assert.doesNotMatch(pkg, /@sunhat\/foundry-tron-toolchain/u); + assert.match(pkg, /elsvv\/foundry-tron/u); + assert.doesNotMatch( + readFileSync(resolve(root, 'script/Counter.s.sol'), 'utf8'), + /forge-std/u, + ); + assert.doesNotMatch( + readFileSync(resolve(root, 'test/Counter.t.sol'), 'utf8'), + /forge-std/u, + ); }); test('adopt writes only the binding', () => { - const root = temp('adopt'); const config = 'export default { solidity: "0.8.26" };\n'; writeFileSync(resolve(root, 'hardhat.config.ts'), config); json(resolve(root, 'package.json'), { devDependencies: { hardhat: '2.22.0' } }); - const result = run(root, ['init', '--framework', 'hardhat', '--adopt']); assert.equal(result.status, 0, result.stderr); assert.equal(readFileSync(resolve(root, 'hardhat.config.ts'), 'utf8'), config); - assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /target = "tron"/u); + const root = temp('adopt'); + const config = 'export default { solidity: "0.8.26" };\n'; + writeFileSync(resolve(root, 'hardhat.config.ts'), config); + json(resolve(root, 'package.json'), { + devDependencies: { hardhat: '2.22.0' }, + }); + const result = run(root, ['init', '--framework', 'hardhat', '--adopt']); + assert.equal(result.status, 0, result.stderr); + assert.equal( + readFileSync(resolve(root, 'hardhat.config.ts'), 'utf8'), + config, + ); + assert.match( + readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), + /target = "tron"/u, + ); }); test('hardhat receives literal argv and native exit code', () => { - const root = temp('hh'); binding(root, 'hardhat', 'evm'); hardhat(root); const result = run(root, ['compile', '$HOME', 'test argument']); - assert.equal(result.status, 17); assert.equal(result.stdout, '["compile","$HOME","test argument"]'); + const root = temp('hh'); + binding(root, 'hardhat', 'evm'); + hardhat(root); + const result = run(root, ['compile', '$HOME', 'test argument']); + assert.equal(result.status, 17); + assert.equal(result.stdout, '["compile","$HOME","test argument"]'); +}); +test('legacy framework namespaces are rejected', () => { + const result = run(temp('legacy'), ['foundry', 'build']); + assert.equal(result.status, 2); + assert.match( + result.stderr, + /namespace is no longer supported.*sunhat build/u, + ); }); -test('legacy framework namespaces are rejected', () => { const result = run(temp('legacy'), ['foundry', 'build']); assert.equal(result.status, 2); assert.match(result.stderr, /namespace is no longer supported.*sunhat build/u); }); test('Hardhat commands are passed through without a namespace', () => { - const root = temp('hh-toolchain'); binding(root, 'hardhat', 'evm'); hardhat(root); + const root = temp('hh-toolchain'); + binding(root, 'hardhat', 'evm'); + hardhat(root); const result = run(root, ['toolchain', 'check']); - assert.equal(result.status, 17); assert.equal(result.stdout, '["toolchain","check"]'); + assert.equal(result.status, 17); + assert.equal(result.stdout, '["toolchain","check"]'); }); test('foundry native commands and tools select exact binaries', () => { - const root = temp('foundry'); binding(root, 'foundry', 'evm'); foundry(root, 'evm'); - assert.equal(run(root, ['build', '--sizes']).stdout, 'forge:["build","--sizes"]'); - assert.equal(run(root, ['compile', '--force']).stdout, 'forge:["compile","--force"]'); - assert.equal(run(root, ['cast', 'block-number']).stdout, 'cast:["block-number"]'); + const root = temp('foundry'); + binding(root, 'foundry', 'evm'); + foundry(root, 'evm'); + assert.equal( + run(root, ['build', '--sizes']).stdout, + 'forge:["build","--sizes"]', + ); + assert.equal( + run(root, ['compile', '--force']).stdout, + 'forge:["compile","--force"]', + ); + assert.equal( + run(root, ['cast', 'block-number']).stdout, + 'cast:["block-number"]', + ); const info = run(root, ['toolchain', 'info']); - assert.equal(info.status, 0); assert.match(info.stdout, /source=foundry-rs\/foundry/u); assert.match(info.stdout, /release=v1\.8\.6/u); + assert.equal(info.status, 0); + assert.match(info.stdout, /source=foundry-rs\/foundry/u); + assert.match(info.stdout, /release=v1\.8\.6/u); +}); +test('TRON rejects anvil without launching toolchain', () => { + const root = temp('tron'); + binding(root, 'foundry', 'tron'); + const result = run(root, ['anvil']); + assert.equal(result.status, 2); + assert.match(result.stderr, /unsupported.*TRON/u); +}); +test('Hardhat 3 is rejected with resolved version', () => { + const root = temp('hh3'); + binding(root, 'hardhat', 'evm'); + hardhat(root, '3.0.0'); + const result = run(root, ['test']); + assert.equal(result.status, 3); + assert.match(result.stderr, /Hardhat 2.*3\.0\.0/u); }); -test('TRON rejects anvil without launching toolchain', () => { const root = temp('tron'); binding(root, 'foundry', 'tron'); const result = run(root, ['anvil']); assert.equal(result.status, 2); assert.match(result.stderr, /unsupported.*TRON/u); }); -test('Hardhat 3 is rejected with resolved version', () => { const root = temp('hh3'); binding(root, 'hardhat', 'evm'); hardhat(root, '3.0.0'); const result = run(root, ['test']); assert.equal(result.status, 3); assert.match(result.stderr, /Hardhat 2.*3\.0\.0/u); }); test('tampered toolchain binary is rejected', () => { - const root = temp('digest'); binding(root, 'foundry', 'evm'); foundry(root, 'evm'); writeFileSync(resolve(root, '.sunhat/toolchains/evm/forge'), 'tampered'); - const result = run(root, ['build']); assert.equal(result.status, 3); assert.match(result.stderr, /digest mismatch/u); + const root = temp('digest'); + binding(root, 'foundry', 'evm'); + foundry(root, 'evm'); + writeFileSync(resolve(root, '.sunhat/toolchains/evm/forge'), 'tampered'); + const result = run(root, ['build']); + assert.equal(result.status, 3); + assert.match(result.stderr, /digest mismatch/u); }); diff --git a/test/fixtures/toolchain-download.js b/test/fixtures/toolchain-download.js index afcdeba..80ebe8f 100644 --- a/test/fixtures/toolchain-download.js +++ b/test/fixtures/toolchain-download.js @@ -3,6 +3,8 @@ import { writeFileSync } from 'node:fs'; // Keep install tests offline while exercising the CLI's real download handling. globalThis.fetch = async (url) => { writeFileSync(process.env.SUNHAT_TEST_DOWNLOAD_LOG, String(url)); - if (process.env.SUNHAT_TEST_DOWNLOAD === 'http-error') return new Response(null, { status: 503 }); + if (process.env.SUNHAT_TEST_DOWNLOAD === 'http-error') { + return new Response(null, { status: 503 }); + } return new Response('invalid toolchain archive', { status: 200 }); }; diff --git a/test/fixtures/toolchain-install-faults.js b/test/fixtures/toolchain-install-faults.js index d859434..5ae526e 100644 --- a/test/fixtures/toolchain-install-faults.js +++ b/test/fixtures/toolchain-install-faults.js @@ -16,22 +16,50 @@ function inside(parent, path) { } // Model separate mounts for OS temp, project metadata and the toolchains folder. -function device(path) { return inside(toolchains, path) ? 'toolchains' : inside(root, path) ? 'project' : 'os-temp'; } -function failure(code) { return Object.assign(new Error(`injected ${mode} failure (${code})`), { code }); } +function device(path) { + return inside(toolchains, path) + ? 'toolchains' + : inside(root, path) + ? 'project' + : 'os-temp'; +} +function failure(code) { + return Object.assign(new Error(`injected ${mode} failure (${code})`), { + code, + }); +} fs.renameSync = (from, to) => { - fs.appendFileSync(process.env.SUNHAT_TEST_RENAME_LOG, `${JSON.stringify({ from, to })}\n`); - if (mode === 'cross-device' && device(from) !== device(to)) throw failure('EXDEV'); + fs.appendFileSync( + process.env.SUNHAT_TEST_RENAME_LOG, + `${JSON.stringify({ from, to })}\n`, + ); + if (mode === 'cross-device' && device(from) !== device(to)) { + throw failure('EXDEV'); + } const restoring = basename(from) === 'previous'; - if ((mode === 'activate' || mode === 'rollback') && inside(destination, to) && !inside(destination, from) && !restoring) throw failure('EIO'); - if (mode === 'rollback' && restoring) throw failure('EACCES'); - if (mode === 'lock' && to === lock) throw failure('EIO'); + if ( + (mode === 'activate' || mode === 'rollback') && + inside(destination, to) && + !inside(destination, from) && + !restoring + ) { + throw failure('EIO'); + } + if (mode === 'rollback' && restoring) { + throw failure('EACCES'); + } + if (mode === 'lock' && to === lock) { + throw failure('EIO'); + } return rename(from, to); }; fs.writeFileSync = (path, ...args) => { // Also fail the old direct-write implementation, before it can truncate its lock. - if (mode === 'lock' && path === lock) throw failure('EIO'); + if (mode === 'lock' && path === lock) { + throw failure('EIO'); + } return write(path, ...args); }; diff --git a/test/fixtures/toolchain-install-loader.js b/test/fixtures/toolchain-install-loader.js index d5d205c..2f28e79 100644 --- a/test/fixtures/toolchain-install-loader.js +++ b/test/fixtures/toolchain-install-loader.js @@ -1,13 +1,18 @@ import { createHash } from 'node:crypto'; import { readFileSync } from 'node:fs'; -const releasesUrl = new URL('../../dist/toolchain/releases.js', import.meta.url).href; +const releasesUrl = new URL('../../dist/toolchain/releases.js', import.meta.url) + .href; // Keep the production release names and binary mapping. Only replace the archive // digest so installation can verify a small, locally generated archive offline. export async function load(url, context, nextLoad) { - if (url !== releasesUrl) return nextLoad(url, context); - const digest = createHash('sha256').update(readFileSync(process.env.SUNHAT_TEST_ARCHIVE)).digest('hex'); + if (url !== releasesUrl) { + return nextLoad(url, context); + } + const digest = createHash('sha256') + .update(readFileSync(process.env.SUNHAT_TEST_ARCHIVE)) + .digest('hex'); return { format: 'module', shortCircuit: true, diff --git a/test/init-commands.test.js b/test/init-commands.test.js index 9a8807b..12c8375 100644 --- a/test/init-commands.test.js +++ b/test/init-commands.test.js @@ -1,6 +1,16 @@ import assert from 'node:assert/strict'; import { createHash } from 'node:crypto'; -import { chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'; +import { + chmodSync, + existsSync, + mkdirSync, + mkdtempSync, + readFileSync, + realpathSync, + rmSync, + symlinkSync, + writeFileSync, +} from 'node:fs'; import { tmpdir } from 'node:os'; import { dirname, resolve } from 'node:path'; import { spawnSync } from 'node:child_process'; @@ -9,36 +19,86 @@ import test from 'node:test'; const repository = fileURLToPath(new URL('../', import.meta.url)); const cli = resolve(repository, 'bin/sunhat.js'); -const downloadFixture = fileURLToPath(new URL('./fixtures/toolchain-download.js', import.meta.url)); -const version = JSON.parse(readFileSync(resolve(repository, 'package.json'), 'utf8')).version; +const downloadFixture = fileURLToPath( + new URL('./fixtures/toolchain-download.js', import.meta.url), +); +const version = JSON.parse( + readFileSync(resolve(repository, 'package.json'), 'utf8'), +).version; const releases = { evm: { source: 'foundry-rs/foundry', release: 'v1.8.6', revision: 'v1.8.6' }, - tron: { source: 'elsvv/foundry-tron', release: 'foundry-tron-latest', revision: '9ea07db4b342fd606f6f7c3f99be1757e90d5e90' }, + tron: { + source: 'elsvv/foundry-tron', + release: 'foundry-tron-latest', + revision: '9ea07db4b342fd606f6f7c3f99be1757e90d5e90', + }, }; // Cover the template commands and every routing branch. Native frameworks own // their full task lists; these executables record dispatch without compiling or // broadcasting transactions, starting servers, or requiring Docker/network access. const hardhatCommands = [ - ['compile'], ['compile', '--force'], ['test'], ['test', '--grep', 'Counter'], - ['node'], ['run', 'scripts/deploy.ts'], ['clean'], ['console', '--no-compile'], - ['flatten', 'contracts/Counter.sol'], ['help', 'compile'], - ['toolchain', 'install'], ['toolchain', 'check'], ['toolchain', 'info'], - ['custom-plugin-task', '--flag', 'space value', '$HOME', '$(literal)', 'a;b', '', '--', '--literal'], + ['compile'], + ['compile', '--force'], + ['test'], + ['test', '--grep', 'Counter'], + ['node'], + ['run', 'scripts/deploy.ts'], + ['clean'], + ['console', '--no-compile'], + ['flatten', 'contracts/Counter.sol'], + ['help', 'compile'], + ['toolchain', 'install'], + ['toolchain', 'check'], + ['toolchain', 'info'], + [ + 'custom-plugin-task', + '--flag', + 'space value', + '$HOME', + '$(literal)', + 'a;b', + '', + '--', + '--literal', + ], ]; const forgeCommands = [ - ['build'], ['build', '--sizes'], ['compile', '--force'], ['test'], ['test', '-vvv'], - ['test', '--match-contract', 'CounterTest'], ['test', '--gas-report'], - ['snapshot'], ['coverage'], ['script', 'script/Counter.s.sol:CounterScript'], - ['create', 'src/Counter.sol:Counter'], ['clean'], ['fmt', '--check'], - ['inspect', 'src/Counter.sol:Counter', 'abi'], ['help', 'build'], - ['custom-forge-command', '--flag', 'space value', '$HOME', '$(literal)', 'a;b', '', '--', '--literal'], + ['build'], + ['build', '--sizes'], + ['compile', '--force'], + ['test'], + ['test', '-vvv'], + ['test', '--match-contract', 'CounterTest'], + ['test', '--gas-report'], + ['snapshot'], + ['coverage'], + ['script', 'script/Counter.s.sol:CounterScript'], + ['create', 'src/Counter.sol:Counter'], + ['clean'], + ['fmt', '--check'], + ['inspect', 'src/Counter.sol:Counter', 'abi'], + ['help', 'build'], + [ + 'custom-forge-command', + '--flag', + 'space value', + '$HOME', + '$(literal)', + 'a;b', + '', + '--', + '--literal', + ], ]; function run(cwd, args, { env = {}, preload = false } = {}) { const nodeArgs = preload ? ['--import', downloadFixture] : []; return spawnSync(process.execPath, [...nodeArgs, cli, ...args], { - cwd, encoding: 'utf8', timeout: 10_000, env: { ...process.env, ...env }, + cwd, + encoding: 'utf8', + timeout: 10_000, + env: { ...process.env, ...env }, }); } @@ -48,40 +108,75 @@ function json(path, value) { } function project(t, framework, target) { - const temporary = mkdtempSync(resolve(tmpdir(), `sunhat-init-${framework}-${target}-`)); + const temporary = mkdtempSync( + resolve(tmpdir(), `sunhat-init-${framework}-${target}-`), + ); t.after(() => rmSync(temporary, { recursive: true, force: true })); const destination = resolve(temporary, 'project with spaces'); - const initialized = run(temporary, ['init', '--framework', framework, '--target', target, destination]); + const initialized = run(temporary, [ + 'init', + '--framework', + framework, + '--target', + target, + destination, + ]); assert.equal(initialized.status, 0, initialized.stderr); const root = realpathSync(destination); - assert.equal(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), `[project]\nframework = "${framework}"\ntarget = "${target}"\n`); + assert.equal( + readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), + `[project]\nframework = "${framework}"\ntarget = "${target}"\n`, + ); const nested = resolve(root, 'nested directory', 'contracts'); mkdirSync(nested, { recursive: true }); const log = resolve(temporary, 'invocations.jsonl'); return { - root, nested, framework, target, log, - calls: () => existsSync(log) ? readFileSync(log, 'utf8').trim().split('\n').map(line => JSON.parse(line)) : [], + root, + nested, + framework, + target, + log, + calls: () => + existsSync(log) + ? readFileSync(log, 'utf8') + .trim() + .split('\n') + .map((line) => JSON.parse(line)) + : [], }; } function recorder(path, project, tool) { mkdirSync(dirname(path), { recursive: true }); - const identity = { framework: project.framework, target: project.target, tool }; - writeFileSync(path, `#!/usr/bin/env node + const identity = { + framework: project.framework, + target: project.target, + tool, + }; + writeFileSync( + path, + `#!/usr/bin/env node const call = { ...${JSON.stringify(identity)}, args: process.argv.slice(2), cwd: process.cwd() }; require('node:fs').appendFileSync(${JSON.stringify(project.log)}, JSON.stringify(call) + '\\n'); process.stdout.write(JSON.stringify(call)); process.stderr.write(process.env.SUNHAT_TEST_STDERR ?? ''); process.exitCode = Number(process.env.SUNHAT_TEST_EXIT_CODE ?? 0); -`); +`, + ); chmodSync(path, 0o755); } function installFrameworkFixture(project) { if (project.framework === 'hardhat') { - const pkg = JSON.parse(readFileSync(resolve(project.root, 'package.json'), 'utf8')); + const pkg = JSON.parse( + readFileSync(resolve(project.root, 'package.json'), 'utf8'), + ); const base = resolve(project.root, 'node_modules/hardhat'); - json(resolve(base, 'package.json'), { name: 'hardhat', version: pkg.devDependencies.hardhat, bin: { hardhat: 'cli.cjs' } }); + json(resolve(base, 'package.json'), { + name: 'hardhat', + version: pkg.devDependencies.hardhat, + bin: { hardhat: 'cli.cjs' }, + }); recorder(resolve(base, 'cli.cjs'), project, 'hardhat'); } else { const binaries = {}; @@ -89,9 +184,20 @@ function installFrameworkFixture(project) { const filename = project.target === 'tron' ? `${tool}-tron` : tool; const path = `.sunhat/toolchains/${project.target}/${filename}`; recorder(resolve(project.root, path), project, tool); - binaries[tool] = { path, sha256: createHash('sha256').update(readFileSync(resolve(project.root, path))).digest('hex') }; + binaries[tool] = { + path, + sha256: createHash('sha256') + .update(readFileSync(resolve(project.root, path))) + .digest('hex'), + }; } - json(resolve(project.root, '.sunhat/toolchain.json'), { version: 1, target: project.target, ...releases[project.target], platform: 'test', binaries }); + json(resolve(project.root, '.sunhat/toolchain.json'), { + version: 1, + target: project.target, + ...releases[project.target], + platform: 'test', + binaries, + }); } // Expose the real CLI to the generated npm scripts without installing packages. const bin = resolve(project.root, 'node_modules/.bin'); @@ -100,13 +206,23 @@ function installFrameworkFixture(project) { } function expectedCall(project, tool, args) { - return { framework: project.framework, target: project.target, tool, args, cwd: project.root }; + return { + framework: project.framework, + target: project.target, + tool, + args, + cwd: project.root, + }; } function assertNative(project, cwd, args, tool, forwarded, env = {}) { const before = project.calls().length; const result = run(cwd, args, { env }); - assert.equal(result.status, Number(env.SUNHAT_TEST_EXIT_CODE ?? 0), result.stderr || String(result.error ?? '')); + assert.equal( + result.status, + Number(env.SUNHAT_TEST_EXIT_CODE ?? 0), + result.stderr || String(result.error ?? ''), + ); assert.equal(result.stderr, env.SUNHAT_TEST_STDERR ?? ''); const expected = expectedCall(project, tool, forwarded); assert.deepEqual(JSON.parse(result.stdout), expected); @@ -118,20 +234,54 @@ for (const framework of ['foundry', 'hardhat']) { test(`init ${framework}/${target}: command matrix`, async (t) => { const initialized = project(t, framework, target); installFrameworkFixture(initialized); - const commands = framework === 'hardhat' - ? hardhatCommands.map(args => ({ args, tool: 'hardhat', forwarded: args })) - : [ - ...forgeCommands.map(args => ({ args, tool: 'forge', forwarded: args })), - { args: ['cast', 'block-number'], tool: 'cast', forwarded: ['block-number'] }, - { args: ['cast', 'call', 'contract with spaces', 'value()(uint256)'], tool: 'cast', forwarded: ['call', 'contract with spaces', 'value()(uint256)'] }, - ...(target === 'evm' ? [ - { args: ['anvil', '--port', '9545'], tool: 'anvil', forwarded: ['--port', '9545'] }, - { args: ['chisel', '--no-banner'], tool: 'chisel', forwarded: ['--no-banner'] }, - ] : []), - ]; + const commands = + framework === 'hardhat' + ? hardhatCommands.map((args) => ({ + args, + tool: 'hardhat', + forwarded: args, + })) + : [ + ...forgeCommands.map((args) => ({ + args, + tool: 'forge', + forwarded: args, + })), + { + args: ['cast', 'block-number'], + tool: 'cast', + forwarded: ['block-number'], + }, + { + args: [ + 'cast', + 'call', + 'contract with spaces', + 'value()(uint256)', + ], + tool: 'cast', + forwarded: ['call', 'contract with spaces', 'value()(uint256)'], + }, + ...(target === 'evm' + ? [ + { + args: ['anvil', '--port', '9545'], + tool: 'anvil', + forwarded: ['--port', '9545'], + }, + { + args: ['chisel', '--no-banner'], + tool: 'chisel', + forwarded: ['--no-banner'], + }, + ] + : []), + ]; for (const { args, tool, forwarded } of commands) { await t.test(args.join(' '), () => { - for (const cwd of [initialized.root, initialized.nested]) assertNative(initialized, cwd, args, tool, forwarded); + for (const cwd of [initialized.root, initialized.nested]) { + assertNative(initialized, cwd, args, tool, forwarded); + } }); } @@ -140,80 +290,145 @@ for (const framework of ['foundry', 'hardhat']) { const before = initialized.calls().length; const npmArgs = ['run', script, '--', 'literal argument']; const result = process.env.npm_execpath - ? spawnSync(process.execPath, [process.env.npm_execpath, ...npmArgs], { cwd: initialized.nested, encoding: 'utf8', timeout: 10_000 }) - : spawnSync('npm', npmArgs, { cwd: initialized.nested, encoding: 'utf8', timeout: 10_000 }); - assert.equal(result.status, 0, result.stderr || String(result.error ?? '')); - const command = script === 'test' ? 'test' : framework === 'hardhat' ? 'compile' : 'build'; - assert.deepEqual(initialized.calls().slice(before), [expectedCall(initialized, framework === 'hardhat' ? 'hardhat' : 'forge', [command, 'literal argument'])]); + ? spawnSync( + process.execPath, + [process.env.npm_execpath, ...npmArgs], + { cwd: initialized.nested, encoding: 'utf8', timeout: 10_000 }, + ) + : spawnSync('npm', npmArgs, { + cwd: initialized.nested, + encoding: 'utf8', + timeout: 10_000, + }); + assert.equal( + result.status, + 0, + result.stderr || String(result.error ?? ''), + ); + const command = + script === 'test' + ? 'test' + : framework === 'hardhat' + ? 'compile' + : 'build'; + assert.deepEqual(initialized.calls().slice(before), [ + expectedCall( + initialized, + framework === 'hardhat' ? 'hardhat' : 'forge', + [command, 'literal argument'], + ), + ]); } }); await t.test('preserves native failure exit status and stderr', () => { const command = framework === 'hardhat' ? 'compile' : 'build'; - assertNative(initialized, initialized.nested, [command], framework === 'hardhat' ? 'hardhat' : 'forge', [command], { - SUNHAT_TEST_EXIT_CODE: '23', SUNHAT_TEST_STDERR: 'native compiler failure\n', - }); + assertNative( + initialized, + initialized.nested, + [command], + framework === 'hardhat' ? 'hardhat' : 'forge', + [command], + { + SUNHAT_TEST_EXIT_CODE: '23', + SUNHAT_TEST_STDERR: 'native compiler failure\n', + }, + ); }); - await t.test('global help/version and legacy namespaces do not launch a framework', () => { - const before = initialized.calls().length; - for (const flag of ['--help', '-h']) { - const result = run(initialized.nested, [flag]); - assert.equal(result.status, 0, result.stderr); - assert.match(result.stdout, /sunhat /u); - } - for (const flag of ['--version', '-V']) { - const result = run(initialized.nested, [flag]); - assert.equal(result.status, 0, result.stderr); - assert.equal(result.stdout, `sunhat ${version}\n`); - } - for (const namespace of ['hardhat', 'foundry']) { - const result = run(initialized.nested, [namespace, 'test']); - assert.equal(result.status, 2, result.stderr); - assert.match(result.stderr, /namespace is no longer supported/u); - } - assert.equal(initialized.calls().length, before); - }); - - if (framework === 'foundry') { - await t.test('toolchain info/check use the initialized target without launching Forge', () => { + await t.test( + 'global help/version and legacy namespaces do not launch a framework', + () => { const before = initialized.calls().length; - for (const command of ['info', 'check']) { - const result = run(initialized.nested, ['toolchain', command]); + for (const flag of ['--help', '-h']) { + const result = run(initialized.nested, [flag]); + assert.equal(result.status, 0, result.stderr); + assert.match(result.stdout, /sunhat /u); + } + for (const flag of ['--version', '-V']) { + const result = run(initialized.nested, [flag]); assert.equal(result.status, 0, result.stderr); - assert.equal(result.stdout, `framework=foundry\ntarget=${target}\nsource=${releases[target].source}\nrelease=${releases[target].release}\nrevision=${releases[target].revision}\nplatform=test\n`); + assert.equal(result.stdout, `sunhat ${version}\n`); } - for (const args of [[], ['unknown'], ['check', '--extra'], ['install', 'extra']]) { - const result = run(initialized.nested, ['toolchain', ...args]); + for (const namespace of ['hardhat', 'foundry']) { + const result = run(initialized.nested, [namespace, 'test']); assert.equal(result.status, 2, result.stderr); - assert.match(result.stderr, /toolchain requires exactly one command/u); + assert.match(result.stderr, /namespace is no longer supported/u); } assert.equal(initialized.calls().length, before); - }); + }, + ); - if (target === 'tron') { - await t.test('anvil/chisel are rejected before launching the installed binaries', () => { + if (framework === 'foundry') { + await t.test( + 'toolchain info/check use the initialized target without launching Forge', + () => { const before = initialized.calls().length; - for (const tool of ['anvil', 'chisel']) { - const result = run(initialized.nested, [tool]); + for (const command of ['info', 'check']) { + const result = run(initialized.nested, ['toolchain', command]); + assert.equal(result.status, 0, result.stderr); + assert.equal( + result.stdout, + `framework=foundry\ntarget=${target}\nsource=${releases[target].source}\nrelease=${releases[target].release}\nrevision=${releases[target].revision}\nplatform=test\n`, + ); + } + for (const args of [ + [], + ['unknown'], + ['check', '--extra'], + ['install', 'extra'], + ]) { + const result = run(initialized.nested, ['toolchain', ...args]); assert.equal(result.status, 2, result.stderr); - assert.match(result.stderr, new RegExp(`${tool} is unsupported for the TRON target`, 'u')); + assert.match( + result.stderr, + /toolchain requires exactly one command/u, + ); } assert.equal(initialized.calls().length, before); - }); + }, + ); + + if (target === 'tron') { + await t.test( + 'anvil/chisel are rejected before launching the installed binaries', + () => { + const before = initialized.calls().length; + for (const tool of ['anvil', 'chisel']) { + const result = run(initialized.nested, [tool]); + assert.equal(result.status, 2, result.stderr); + assert.match( + result.stderr, + new RegExp(`${tool} is unsupported for the TRON target`, 'u'), + ); + } + assert.equal(initialized.calls().length, before); + }, + ); } - await t.test('toolchain check and native execution reject a tampered binary', () => { - const before = initialized.calls().length; - const lock = JSON.parse(readFileSync(resolve(initialized.root, '.sunhat/toolchain.json'), 'utf8')); - writeFileSync(resolve(initialized.root, lock.binaries.forge.path), 'tampered'); - for (const args of [['toolchain', 'check'], ['build']]) { - const result = run(initialized.nested, args); - assert.equal(result.status, 3, result.stderr); - assert.match(result.stderr, /digest mismatch/u); - } - assert.equal(initialized.calls().length, before); - }); + await t.test( + 'toolchain check and native execution reject a tampered binary', + () => { + const before = initialized.calls().length; + const lock = JSON.parse( + readFileSync( + resolve(initialized.root, '.sunhat/toolchain.json'), + 'utf8', + ), + ); + writeFileSync( + resolve(initialized.root, lock.binaries.forge.path), + 'tampered', + ); + for (const args of [['toolchain', 'check'], ['build']]) { + const result = run(initialized.nested, args); + assert.equal(result.status, 3, result.stderr); + assert.match(result.stderr, /digest mismatch/u); + } + assert.equal(initialized.calls().length, before); + }, + ); } }); } @@ -223,7 +438,11 @@ for (const target of ['evm', 'tron']) { test(`init foundry/${target}: toolchain install download failures`, async (t) => { const initialized = project(t, 'foundry', target); await t.test('check/info/build report a missing toolchain', () => { - for (const args of [['toolchain', 'check'], ['toolchain', 'info'], ['build']]) { + for (const args of [ + ['toolchain', 'check'], + ['toolchain', 'info'], + ['build'], + ]) { const result = run(initialized.nested, args); assert.equal(result.status, 3, result.stderr); assert.match(result.stderr, /toolchain is not installed/u); @@ -233,16 +452,34 @@ for (const target of ['evm', 'tron']) { await t.test(mode, () => { const log = resolve(initialized.root, 'download-url.txt'); const result = run(initialized.nested, ['toolchain', 'install'], { - preload: true, env: { SUNHAT_TEST_DOWNLOAD: mode, SUNHAT_TEST_DOWNLOAD_LOG: log }, + preload: true, + env: { SUNHAT_TEST_DOWNLOAD: mode, SUNHAT_TEST_DOWNLOAD_LOG: log }, }); assert.equal(result.status, 3, result.stderr); - assert.match(result.stderr, mode === 'http-error' ? /download failed \(503\)/u : /archive digest mismatch/u); + assert.match( + result.stderr, + mode === 'http-error' + ? /download failed \(503\)/u + : /archive digest mismatch/u, + ); const platform = `${process.platform}_${process.arch === 'x64' ? 'amd64' : process.arch}`; const extension = process.platform === 'win32' ? 'zip' : 'tar.gz'; - const archive = target === 'evm' ? `foundry_v1.8.6_${platform}.${extension}` : `foundry-tron_${platform}.${extension}`; - assert.equal(readFileSync(log, 'utf8'), `https://github.com/${releases[target].source}/releases/download/${releases[target].release}/${archive}`); - assert.equal(existsSync(resolve(initialized.root, '.sunhat/toolchain.json')), false); - assert.equal(existsSync(resolve(initialized.root, '.sunhat/toolchains')), false); + const archive = + target === 'evm' + ? `foundry_v1.8.6_${platform}.${extension}` + : `foundry-tron_${platform}.${extension}`; + assert.equal( + readFileSync(log, 'utf8'), + `https://github.com/${releases[target].source}/releases/download/${releases[target].release}/${archive}`, + ); + assert.equal( + existsSync(resolve(initialized.root, '.sunhat/toolchain.json')), + false, + ); + assert.equal( + existsSync(resolve(initialized.root, '.sunhat/toolchains')), + false, + ); }); } }); diff --git a/test/template-types.test.js b/test/template-types.test.js index d6759b4..6ab6f52 100644 --- a/test/template-types.test.js +++ b/test/template-types.test.js @@ -10,21 +10,64 @@ const repository = fileURLToPath(new URL('../', import.meta.url)); const cli = resolve(repository, 'bin/sunhat.js'); function run(args, cwd, timeout = 10_000) { - const result = spawnSync(process.execPath, args, { cwd, encoding: 'utf8', timeout, maxBuffer: 4 * 1024 * 1024 }); - assert.equal(result.status, 0, [result.error?.message, result.stdout, result.stderr].filter(Boolean).join('\n')); + const result = spawnSync(process.execPath, args, { + cwd, + encoding: 'utf8', + timeout, + maxBuffer: 4 * 1024 * 1024, + }); + assert.equal( + result.status, + 0, + [result.error?.message, result.stdout, result.stderr] + .filter(Boolean) + .join('\n'), + ); } for (const target of ['evm', 'tron']) { - test(`Hardhat ${target} template passes tsc --noEmit with its declared dependencies`, { timeout: 180_000 }, (t) => { - assert.ok(process.env.npm_execpath, 'Run this integration suite with npm run test:templates'); - const temporary = mkdtempSync(resolve(tmpdir(), `sunhat-template-types-${target}-`)); - t.after(() => rmSync(temporary, { recursive: true, force: true })); - const project = resolve(temporary, 'project with spaces'); - run([cli, 'init', '--framework', 'hardhat', '--target', target, project], temporary); - // Use the generated package as-is, including its exact dependency versions. - run([process.env.npm_execpath, 'install', '--ignore-scripts', '--no-audit', '--no-fund'], project, 150_000); - const config = JSON.parse(readFileSync(resolve(project, 'tsconfig.json'), 'utf8')); - assert.notEqual(config.compilerOptions.skipLibCheck, true, 'Template type checks must include dependency declarations'); - run([resolve(project, 'node_modules/typescript/bin/tsc'), '--noEmit'], project, 30_000); - }); + test( + `Hardhat ${target} template passes tsc --noEmit with its declared dependencies`, + { timeout: 180_000 }, + (t) => { + assert.ok( + process.env.npm_execpath, + 'Run this integration suite with npm run test:templates', + ); + const temporary = mkdtempSync( + resolve(tmpdir(), `sunhat-template-types-${target}-`), + ); + t.after(() => rmSync(temporary, { recursive: true, force: true })); + const project = resolve(temporary, 'project with spaces'); + run( + [cli, 'init', '--framework', 'hardhat', '--target', target, project], + temporary, + ); + // Use the generated package as-is, including its exact dependency versions. + run( + [ + process.env.npm_execpath, + 'install', + '--ignore-scripts', + '--no-audit', + '--no-fund', + ], + project, + 150_000, + ); + const config = JSON.parse( + readFileSync(resolve(project, 'tsconfig.json'), 'utf8'), + ); + assert.notEqual( + config.compilerOptions.skipLibCheck, + true, + 'Template type checks must include dependency declarations', + ); + run( + [resolve(project, 'node_modules/typescript/bin/tsc'), '--noEmit'], + project, + 30_000, + ); + }, + ); } diff --git a/test/toolchain.test.js b/test/toolchain.test.js index 9e8c9fc..bdd8c2a 100644 --- a/test/toolchain.test.js +++ b/test/toolchain.test.js @@ -1,7 +1,18 @@ import assert from 'node:assert/strict'; import { spawnSync } from 'node:child_process'; import { createHash } from 'node:crypto'; -import { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from 'node:fs'; +import { + existsSync, + mkdirSync, + mkdtempSync, + readFileSync, + readdirSync, + realpathSync, + renameSync, + rmSync, + statSync, + writeFileSync, +} from 'node:fs'; import { tmpdir } from 'node:os'; import { resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; @@ -10,13 +21,25 @@ import { releaseFor } from '../dist/toolchain/releases.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); const cli = resolve(repository, 'bin/sunhat.js'); -const loader = new URL('./fixtures/toolchain-install-loader.js', import.meta.url).href; -const download = new URL('./fixtures/toolchain-install-download.js', import.meta.url).href; -const faults = new URL('./fixtures/toolchain-install-faults.js', import.meta.url).href; +const loader = new URL( + './fixtures/toolchain-install-loader.js', + import.meta.url, +).href; +const download = new URL( + './fixtures/toolchain-install-download.js', + import.meta.url, +).href; +const faults = new URL( + './fixtures/toolchain-install-faults.js', + import.meta.url, +).href; const tools = ['forge', 'cast', 'anvil', 'chisel']; function releaseOn(target, platform, arch) { - const platformDescriptor = Object.getOwnPropertyDescriptor(process, 'platform'); + const platformDescriptor = Object.getOwnPropertyDescriptor( + process, + 'platform', + ); const archDescriptor = Object.getOwnPropertyDescriptor(process, 'arch'); try { Object.defineProperty(process, 'platform', { value: platform }); @@ -31,70 +54,169 @@ function releaseOn(target, platform, arch) { function writeArchive(fixture, { label = 'fixture', missingTool } = {}) { const { target, source, archive } = fixture; const windows = process.platform === 'win32'; - rmSync(source, { recursive: true, force: true }); mkdirSync(source); + rmSync(source, { recursive: true, force: true }); + mkdirSync(source); rmSync(archive, { force: true }); - fixture.contents = Object.fromEntries(tools.filter(tool => tool !== missingTool).map(tool => [`${tool}${target === 'tron' ? '-tron' : ''}${windows ? '.exe' : ''}`, Buffer.from(`${process.platform} ${target} ${tool} ${label}\n`)])); - for (const [filename, bytes] of Object.entries(fixture.contents)) writeFileSync(resolve(source, filename), bytes); - const literal = value => `'${value.replaceAll("'", "''")}'`; - const files = Object.keys(fixture.contents).map(filename => literal(resolve(source, filename))).join(', '); + fixture.contents = Object.fromEntries( + tools + .filter((tool) => tool !== missingTool) + .map((tool) => [ + `${tool}${target === 'tron' ? '-tron' : ''}${windows ? '.exe' : ''}`, + Buffer.from(`${process.platform} ${target} ${tool} ${label}\n`), + ]), + ); + for (const [filename, bytes] of Object.entries(fixture.contents)) { + writeFileSync(resolve(source, filename), bytes); + } + const literal = (value) => `'${value.replaceAll("'", "''")}'`; + const files = Object.keys(fixture.contents) + .map((filename) => literal(resolve(source, filename))) + .join(', '); const compressed = windows - ? spawnSync('powershell.exe', ['-NoProfile', '-Command', `$ErrorActionPreference = 'Stop'; Compress-Archive -LiteralPath @(${files}) -DestinationPath ${literal(archive)}`], { encoding: 'utf8', timeout: 30_000 }) - : spawnSync('tar', ['-czf', archive, '-C', source, ...Object.keys(fixture.contents)], { encoding: 'utf8', timeout: 30_000 }); - assert.equal(compressed.status, 0, compressed.stderr || String(compressed.error ?? '')); + ? spawnSync( + 'powershell.exe', + [ + '-NoProfile', + '-Command', + `$ErrorActionPreference = 'Stop'; Compress-Archive -LiteralPath @(${files}) -DestinationPath ${literal(archive)}`, + ], + { encoding: 'utf8', timeout: 30_000 }, + ) + : spawnSync( + 'tar', + ['-czf', archive, '-C', source, ...Object.keys(fixture.contents)], + { encoding: 'utf8', timeout: 30_000 }, + ); + assert.equal( + compressed.status, + 0, + compressed.stderr || String(compressed.error ?? ''), + ); } function installFixture(t, target, directory = tmpdir()) { - const temporary = realpathSync(mkdtempSync(resolve(directory, `sunhat-install-${target}-`))); + const temporary = realpathSync( + mkdtempSync(resolve(directory, `sunhat-install-${target}-`)), + ); t.after(() => rmSync(temporary, { recursive: true, force: true })); const fixture = { - temporary, target, root: resolve(temporary, 'project with spaces'), + temporary, + target, + root: resolve(temporary, 'project with spaces'), source: resolve(temporary, 'archive source'), - archive: resolve(temporary, process.platform === 'win32' ? 'toolchain.zip' : 'toolchain.tar.gz'), - log: resolve(temporary, 'download-url.txt'), renameLog: resolve(temporary, 'renames.jsonl'), + archive: resolve( + temporary, + process.platform === 'win32' ? 'toolchain.zip' : 'toolchain.tar.gz', + ), + log: resolve(temporary, 'download-url.txt'), + renameLog: resolve(temporary, 'renames.jsonl'), }; writeArchive(fixture); - const initialized = spawnSync(process.execPath, [cli, 'init', '--target', target, fixture.root], { encoding: 'utf8', timeout: 10_000 }); - assert.equal(initialized.status, 0, initialized.stderr || String(initialized.error ?? '')); + const initialized = spawnSync( + process.execPath, + [cli, 'init', '--target', target, fixture.root], + { encoding: 'utf8', timeout: 10_000 }, + ); + assert.equal( + initialized.status, + 0, + initialized.stderr || String(initialized.error ?? ''), + ); return fixture; } function install(fixture, fault) { - return spawnSync(process.execPath, ['--experimental-loader', loader, '--import', download, ...(fault ? ['--import', faults] : []), cli, 'toolchain', 'install'], { - cwd: fixture.root, encoding: 'utf8', timeout: 30_000, - env: { - ...process.env, SUNHAT_TEST_ARCHIVE: fixture.archive, SUNHAT_TEST_DOWNLOAD_LOG: fixture.log, - SUNHAT_TEST_PROJECT_ROOT: fixture.root, SUNHAT_TEST_TARGET: fixture.target, - SUNHAT_TEST_INSTALL_FAULT: fault ?? '', SUNHAT_TEST_RENAME_LOG: fixture.renameLog, + return spawnSync( + process.execPath, + [ + '--experimental-loader', + loader, + '--import', + download, + ...(fault ? ['--import', faults] : []), + cli, + 'toolchain', + 'install', + ], + { + cwd: fixture.root, + encoding: 'utf8', + timeout: 30_000, + env: { + ...process.env, + SUNHAT_TEST_ARCHIVE: fixture.archive, + SUNHAT_TEST_DOWNLOAD_LOG: fixture.log, + SUNHAT_TEST_PROJECT_ROOT: fixture.root, + SUNHAT_TEST_TARGET: fixture.target, + SUNHAT_TEST_INSTALL_FAULT: fault ?? '', + SUNHAT_TEST_RENAME_LOG: fixture.renameLog, + }, }, - }); + ); } -function assertInstalled(result) { assert.equal(result.status, 0, result.stderr || String(result.error ?? '')); } +function assertInstalled(result) { + assert.equal(result.status, 0, result.stderr || String(result.error ?? '')); +} function snapshot(root) { const lock = readFileSync(resolve(root, '.sunhat/toolchain.json')); - return { lock, binaries: Object.fromEntries(Object.values(JSON.parse(lock).binaries).map(item => [item.path, readFileSync(resolve(root, item.path))])) }; + return { + lock, + binaries: Object.fromEntries( + Object.values(JSON.parse(lock).binaries).map((item) => [ + item.path, + readFileSync(resolve(root, item.path)), + ]), + ), + }; } function assertPreserved(root, previous) { - assert.deepEqual(readFileSync(resolve(root, '.sunhat/toolchain.json')), previous.lock); - for (const [path, bytes] of Object.entries(previous.binaries)) assert.deepEqual(readFileSync(resolve(root, path)), bytes); - assertInstalled(spawnSync(process.execPath, [cli, 'toolchain', 'check'], { cwd: root, encoding: 'utf8', timeout: 10_000 })); + assert.deepEqual( + readFileSync(resolve(root, '.sunhat/toolchain.json')), + previous.lock, + ); + for (const [path, bytes] of Object.entries(previous.binaries)) { + assert.deepEqual(readFileSync(resolve(root, path)), bytes); + } + assertInstalled( + spawnSync(process.execPath, [cli, 'toolchain', 'check'], { + cwd: root, + encoding: 'utf8', + timeout: 10_000, + }), + ); } function assertClean(root, target) { - assert.deepEqual(readdirSync(resolve(root, '.sunhat')).sort(), ['toolchain.json', 'toolchains']); + assert.deepEqual(readdirSync(resolve(root, '.sunhat')).sort(), [ + 'toolchain.json', + 'toolchains', + ]); assert.deepEqual(readdirSync(resolve(root, '.sunhat/toolchains')), [target]); } for (const target of ['evm', 'tron']) { - for (const [platform, arch] of [['win32', 'x64'], ['darwin', 'arm64'], ['darwin', 'x64'], ['linux', 'arm64'], ['linux', 'x64']]) { + for (const [platform, arch] of [ + ['win32', 'x64'], + ['darwin', 'arm64'], + ['darwin', 'x64'], + ['linux', 'arm64'], + ['linux', 'x64'], + ]) { test(`${target} release filenames on ${platform}/${arch}`, () => { const release = releaseOn(target, platform, arch); const suffix = `${target === 'tron' ? '-tron' : ''}${platform === 'win32' ? '.exe' : ''}`; - assert.deepEqual(release.tools, Object.fromEntries(tools.map(tool => [tool, `${tool}${suffix}`]))); + assert.deepEqual( + release.tools, + Object.fromEntries(tools.map((tool) => [tool, `${tool}${suffix}`])), + ); const prefix = target === 'evm' ? 'foundry_v1.8.6' : 'foundry-tron'; - assert.equal(release.archive, `${prefix}_${platform}_${arch === 'x64' ? 'amd64' : arch}.${platform === 'win32' ? 'zip' : 'tar.gz'}`); + assert.equal( + release.archive, + `${prefix}_${platform}_${arch === 'x64' ? 'amd64' : arch}.${platform === 'win32' ? 'zip' : 'tar.gz'}`, + ); }); } @@ -104,29 +226,72 @@ for (const target of ['evm', 'tron']) { const { root, log, contents } = fixture; assertInstalled(install(fixture)); const release = releaseFor(target); - assert.equal(readFileSync(log, 'utf8'), `https://github.com/${release.source}/releases/download/${release.release}/${release.archive}`); - const lock = JSON.parse(readFileSync(resolve(root, '.sunhat/toolchain.json'), 'utf8')); + assert.equal( + readFileSync(log, 'utf8'), + `https://github.com/${release.source}/releases/download/${release.release}/${release.archive}`, + ); + const lock = JSON.parse( + readFileSync(resolve(root, '.sunhat/toolchain.json'), 'utf8'), + ); assert.equal(lock.version, 1); assert.equal(lock.target, target); - assert.equal(lock.platform, `${process.platform}-${process.arch === 'x64' ? 'amd64' : process.arch}`); + assert.equal( + lock.platform, + `${process.platform}-${process.arch === 'x64' ? 'amd64' : process.arch}`, + ); assert.equal(lock.source, release.source); assert.equal(lock.release, release.release); assert.equal(lock.revision, release.revision); assert.deepEqual(Object.keys(lock.binaries).sort(), [...tools].sort()); - assert.deepEqual(readdirSync(resolve(root, `.sunhat/toolchains/${target}`)).sort(), Object.keys(contents).sort()); + assert.deepEqual( + readdirSync(resolve(root, `.sunhat/toolchains/${target}`)).sort(), + Object.keys(contents).sort(), + ); for (const [tool, item] of Object.entries(lock.binaries)) { const filename = `${tool}${target === 'tron' ? '-tron' : ''}${windows ? '.exe' : ''}`; assert.equal(item.path, `.sunhat/toolchains/${target}/${filename}`); - assert.deepEqual(readFileSync(resolve(root, item.path)), contents[filename]); - assert.equal(item.sha256, createHash('sha256').update(contents[filename]).digest('hex')); - if (windows) assert.equal(existsSync(resolve(root, `.sunhat/toolchains/${target}/${filename.slice(0, -4)}`)), false); + assert.deepEqual( + readFileSync(resolve(root, item.path)), + contents[filename], + ); + assert.equal( + item.sha256, + createHash('sha256').update(contents[filename]).digest('hex'), + ); + if (windows) { + assert.equal( + existsSync( + resolve( + root, + `.sunhat/toolchains/${target}/${filename.slice(0, -4)}`, + ), + ), + false, + ); + } } - const checked = spawnSync(process.execPath, [cli, 'toolchain', 'check'], { cwd: root, encoding: 'utf8', timeout: 10_000 }); - assert.equal(checked.status, 0, checked.stderr || String(checked.error ?? '')); + const checked = spawnSync(process.execPath, [cli, 'toolchain', 'check'], { + cwd: root, + encoding: 'utf8', + timeout: 10_000, + }); + assert.equal( + checked.status, + 0, + checked.stderr || String(checked.error ?? ''), + ); assertClean(root, target); writeFileSync(resolve(root, lock.binaries.forge.path), 'tampered'); - const rejected = spawnSync(process.execPath, [cli, 'toolchain', 'check'], { cwd: root, encoding: 'utf8', timeout: 10_000 }); - assert.equal(rejected.status, 3, rejected.stderr || String(rejected.error ?? '')); + const rejected = spawnSync(process.execPath, [cli, 'toolchain', 'check'], { + cwd: root, + encoding: 'utf8', + timeout: 10_000, + }); + assert.equal( + rejected.status, + 3, + rejected.stderr || String(rejected.error ?? ''), + ); assert.match(rejected.stderr, /forge digest mismatch/u); }); @@ -142,7 +307,9 @@ for (const target of ['evm', 'tron']) { assert.notDeepEqual(bytes, previous.binaries[path]); assert.deepEqual(bytes, fixture.contents[path.split('/').at(-1)]); } - assert.ok(readFileSync(fixture.renameLog, 'utf8').trim().split('\n').length > 0); + assert.ok( + readFileSync(fixture.renameLog, 'utf8').trim().split('\n').length > 0, + ); assertPreserved(fixture.root, installed); assertClean(fixture.root, target); }); @@ -151,7 +318,10 @@ for (const target of ['evm', 'tron']) { const fixture = installFixture(t, target); assertInstalled(install(fixture)); const previous = snapshot(fixture.root); - writeArchive(fixture, { label: 'incomplete replacement', missingTool: 'chisel' }); + writeArchive(fixture, { + label: 'incomplete replacement', + missingTool: 'chisel', + }); const rejected = install(fixture); assert.notEqual(rejected.status, 0); assert.match(rejected.stderr, /ENOENT/u); @@ -167,7 +337,10 @@ for (const target of ['evm', 'tron']) { writeArchive(fixture, { label: 'replacement' }); const rejected = install(fixture, fault); assert.notEqual(rejected.status, 0); - assert.match(rejected.stderr, new RegExp(`injected ${fault} failure`, 'u')); + assert.match( + rejected.stderr, + new RegExp(`injected ${fault} failure`, 'u'), + ); assertPreserved(fixture.root, previous); assertClean(fixture.root, target); }); @@ -181,26 +354,50 @@ for (const target of ['evm', 'tron']) { const rejected = install(fixture, 'rollback'); assert.notEqual(rejected.status, 0); const toolchains = resolve(fixture.root, '.sunhat/toolchains'); - const stages = readdirSync(toolchains).filter(name => name.startsWith(`.install-${target}-`)); + const stages = readdirSync(toolchains).filter((name) => + name.startsWith(`.install-${target}-`), + ); assert.equal(stages.length, 1); const backup = resolve(toolchains, stages[0], 'previous'); - assert.ok(rejected.stderr.includes(`previous toolchain preserved at ${backup}`), rejected.stderr); - assert.deepEqual(readFileSync(resolve(fixture.root, '.sunhat/toolchain.json')), previous.lock); - for (const [path, bytes] of Object.entries(previous.binaries)) assert.deepEqual(readFileSync(resolve(backup, path.split('/').at(-1))), bytes); + assert.ok( + rejected.stderr.includes(`previous toolchain preserved at ${backup}`), + rejected.stderr, + ); + assert.deepEqual( + readFileSync(resolve(fixture.root, '.sunhat/toolchain.json')), + previous.lock, + ); + for (const [path, bytes] of Object.entries(previous.binaries)) { + assert.deepEqual( + readFileSync(resolve(backup, path.split('/').at(-1))), + bytes, + ); + } renameSync(backup, resolve(toolchains, target)); assertPreserved(fixture.root, previous); }); - test(`${target} installs on a different Linux filesystem from OS temp`, { skip: process.platform !== 'linux' }, (t) => { - let fixture; - try { fixture = installFixture(t, target, '/dev/shm'); } - catch (error) { - if (error.code !== 'ENOENT' && error.code !== 'EACCES') throw error; - t.skip('/dev/shm is unavailable'); return; - } - if (statSync(fixture.temporary).dev === statSync(tmpdir()).dev) { t.skip('/dev/shm and OS temp share a filesystem'); return; } - assertInstalled(install(fixture)); - assertPreserved(fixture.root, snapshot(fixture.root)); - assertClean(fixture.root, target); - }); + test( + `${target} installs on a different Linux filesystem from OS temp`, + { skip: process.platform !== 'linux' }, + (t) => { + let fixture; + try { + fixture = installFixture(t, target, '/dev/shm'); + } catch (error) { + if (error.code !== 'ENOENT' && error.code !== 'EACCES') { + throw error; + } + t.skip('/dev/shm is unavailable'); + return; + } + if (statSync(fixture.temporary).dev === statSync(tmpdir()).dev) { + t.skip('/dev/shm and OS temp share a filesystem'); + return; + } + assertInstalled(install(fixture)); + assertPreserved(fixture.root, snapshot(fixture.root)); + assertClean(fixture.root, target); + }, + ); } diff --git a/tsconfig.json b/tsconfig.json index 2fd1821..b8520f2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,16 @@ { "compilerOptions": { - "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", - "rootDir": "src", "outDir": "dist", "strict": true, - "noUncheckedIndexedAccess": true, "exactOptionalPropertyTypes": true, - "declaration": true, "sourceMap": true, "skipLibCheck": true + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "rootDir": "src", + "outDir": "dist", + "strict": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true, + "declaration": true, + "sourceMap": true, + "skipLibCheck": true }, "include": ["src/**/*.ts"] } From 3568cdcbbbaf17f6c11c7530bf9137ef048e1194 Mon Sep 17 00:00:00 2001 From: leon johnson <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 18:56:29 +0800 Subject: [PATCH 02/24] Revert "Revert "Release 2.0.0"" --- .agents/skills/sunhat | 1 - .env | 1 - .eslintignore | 7 - .eslintrc.js | 22 - .github/ISSUE_TEMPLATE/bug_report.yml | 34 - .github/ISSUE_TEMPLATE/config.yml | 5 - .github/ISSUE_TEMPLATE/feature_request.yml | 18 - .github/PULL_REQUEST_TEMPLATE.md | 12 - .github/workflows/ci.yml | 34 + .github/workflows/linux-test.yml | 25 - .github/workflows/release.yml | 47 - .github/workflows/sunhat-dev-publish.yml | 56 - .gitignore | 18 +- .prettierrc | 4 - .setup.js | 11 - .vscode/settings.json | 19 - .vscode/settings.json.default | 19 - CHANGELOG.md | 69 - CONTRIBUTE.md | 29 - LICENSE | 21 - README.md | 315 +- bin/sunhat.js | 2 + docker/Dockerfile | 26 - extendedArtifacts/Address.json | 65 - extendedArtifacts/BeaconProxy.json | 4649 ---- extendedArtifacts/Clones.json | 58 - extendedArtifacts/Context.json | 48 - extendedArtifacts/Diamond.json | 17486 --------------- extendedArtifacts/DiamondCutFacet.json | 10077 --------- extendedArtifacts/DiamondERC165Init.json | 1549 -- extendedArtifacts/DiamondLoupeFacet.json | 3176 --- ...ondLoupeFacetWithoutSupportsInterface.json | 3029 --- extendedArtifacts/EIP173Proxy.json | 4601 ---- extendedArtifacts/EIP173ProxyWithReceive.json | 4418 ---- extendedArtifacts/ERC165.json | 69 - extendedArtifacts/ERC165Checker.json | 59 - extendedArtifacts/ERC165Storage.json | 106 - extendedArtifacts/ERC1967Proxy.json | 3985 ---- extendedArtifacts/ERC1967Upgrade.json | 117 - extendedArtifacts/IBeacon.json | 68 - extendedArtifacts/IDiamondCut.json | 144 - extendedArtifacts/IDiamondLoupe.json | 170 - extendedArtifacts/IERC165.json | 74 - extendedArtifacts/IERC173.json | 121 - extendedArtifacts/IERC1822Proxiable.json | 68 - extendedArtifacts/Initializable.json | 80 - extendedArtifacts/LibDiamond.json | 128 - .../OptimizedTransparentUpgradeableProxy.json | 6037 ------ extendedArtifacts/Ownable.json | 133 - extendedArtifacts/OwnershipFacet.json | 775 - extendedArtifacts/Proxied.json | 47 - extendedArtifacts/Proxy.json | 75 - extendedArtifacts/ProxyAdmin.json | 4129 ---- extendedArtifacts/StorageSlot.json | 58 - .../TransparentUpgradeableProxy.json | 6723 ------ extendedArtifacts/UUPSUpgradeable.json | 157 - extendedArtifacts/UpgradeableBeacon.json | 1969 -- extendedArtifacts/UsingDiamondOwner.json | 51 - extendedArtifacts/index.ts | 35 - extendedArtifactsTron/Address.json | 65 - extendedArtifactsTron/BeaconProxy.json | 4738 ----- extendedArtifactsTron/Clones.json | 58 - extendedArtifactsTron/Context.json | 48 - extendedArtifactsTron/Diamond.json | 17557 ---------------- extendedArtifactsTron/DiamondCutFacet.json | 10112 --------- extendedArtifactsTron/DiamondERC165Init.json | 1549 -- extendedArtifactsTron/DiamondLoupeFacet.json | 3194 --- ...ondLoupeFacetWithoutSupportsInterface.json | 3047 --- extendedArtifactsTron/EIP173Proxy.json | 4707 ----- .../EIP173ProxyWithReceive.json | 4524 ---- extendedArtifactsTron/ERC165.json | 69 - extendedArtifactsTron/ERC165Checker.json | 59 - extendedArtifactsTron/ERC165Storage.json | 106 - extendedArtifactsTron/ERC1967Proxy.json | 4039 ---- extendedArtifactsTron/ERC1967Upgrade.json | 117 - extendedArtifactsTron/IBeacon.json | 68 - extendedArtifactsTron/IDiamondCut.json | 144 - extendedArtifactsTron/IDiamondLoupe.json | 170 - extendedArtifactsTron/IERC165.json | 74 - extendedArtifactsTron/IERC173.json | 121 - extendedArtifactsTron/IERC1822Proxiable.json | 68 - extendedArtifactsTron/Initializable.json | 80 - extendedArtifactsTron/LibDiamond.json | 128 - .../OptimizedTransparentUpgradeableProxy.json | 6143 ------ extendedArtifactsTron/Ownable.json | 133 - extendedArtifactsTron/OwnershipFacet.json | 793 - extendedArtifactsTron/Proxied.json | 47 - extendedArtifactsTron/Proxy.json | 75 - extendedArtifactsTron/ProxyAdmin.json | 4339 ---- extendedArtifactsTron/StorageSlot.json | 58 - .../TransparentUpgradeableProxy.json | 6829 ------ extendedArtifactsTron/UUPSUpgradeable.json | 157 - extendedArtifactsTron/UpgradeableBeacon.json | 2058 -- extendedArtifactsTron/UsingDiamondOwner.json | 51 - extendedArtifactsTron/index.ts | 35 - hardhat.config.ts | 171 - package-lock.json | 54 + package.json | 124 +- skills/sunhat/SKILL.md | 26 - skills/sunhat/agents/openai.yaml | 4 - skills/sunhat/workflows/sunhat-audit.md | 49 - skills/sunhat/workflows/sunhat-compile.md | 41 - skills/sunhat/workflows/sunhat-deploy.md | 54 - skills/sunhat/workflows/sunhat-init.md | 48 - skills/sunhat/workflows/sunhat-test.md | 53 - solc_0.6/proxy/Proxied.sol | 42 - solc_0.7/diamond/UsingDiamondOwner.sol | 12 - solc_0.7/diamond/interfaces/IDiamondCut.sol | 33 - solc_0.7/diamond/libraries/LibDiamond.sol | 207 - solc_0.7/proxy/Proxied.sol | 42 - solc_0.8/diamond/Diamond.sol | 72 - solc_0.8/diamond/UsingDiamondOwner.sol | 12 - solc_0.8/diamond/facets/DiamondCutFacet.sol | 27 - solc_0.8/diamond/facets/DiamondLoupeFacet.sol | 64 - ...mondLoupeFacetWithoutSupportsInterface.sol | 57 - solc_0.8/diamond/facets/OwnershipFacet.sol | 16 - .../initializers/DiamondERC165Init.sol | 25 - solc_0.8/diamond/interfaces/IDiamondCut.sol | 32 - solc_0.8/diamond/interfaces/IDiamondLoupe.sol | 38 - solc_0.8/diamond/interfaces/IERC165.sol | 12 - solc_0.8/diamond/interfaces/IERC173.sol | 19 - solc_0.8/diamond/libraries/LibDiamond.sol | 207 - solc_0.8/openzeppelin/access/Ownable.sol | 76 - .../interfaces/draft-IERC1822.sol | 20 - solc_0.8/openzeppelin/proxy/Clones.sol | 84 - .../proxy/ERC1967/ERC1967Proxy.sol | 33 - .../proxy/ERC1967/ERC1967Upgrade.sol | 182 - solc_0.8/openzeppelin/proxy/Proxy.sol | 86 - .../openzeppelin/proxy/beacon/BeaconProxy.sol | 62 - .../openzeppelin/proxy/beacon/IBeacon.sol | 16 - .../proxy/beacon/UpgradeableBeacon.sol | 66 - .../proxy/transparent/ProxyAdmin.sol | 84 - .../TransparentUpgradeableProxy.sol | 125 - .../proxy/utils/Initializable.sol | 80 - .../proxy/utils/UUPSUpgradeable.sol | 95 - solc_0.8/openzeppelin/utils/Address.sol | 222 - solc_0.8/openzeppelin/utils/Context.sol | 24 - solc_0.8/openzeppelin/utils/StorageSlot.sol | 84 - .../utils/introspection/ERC165.sol | 29 - .../utils/introspection/ERC165Checker.sol | 113 - .../utils/introspection/ERC165Storage.sol | 42 - .../utils/introspection/IERC165.sol | 25 - solc_0.8/proxy/EIP173Proxy.sol | 93 - solc_0.8/proxy/EIP173ProxyWithReceive.sol | 15 - .../OptimizedTransparentUpgradeableProxy.sol | 128 - solc_0.8/proxy/Proxied.sol | 42 - solc_0.8/proxy/Proxy.sol | 66 - src/DeploymentFactory.ts | 217 - src/DeploymentsManager.ts | 1603 -- src/adapters/foundry.ts | 39 + src/adapters/hardhat.ts | 22 + src/bin/sunhat.ts | 9 + src/cli.ts | 449 - src/cli/parser.ts | 22 + src/cli/router.ts | 34 + src/commands/init.ts | 129 + src/commands/toolchain.ts | 76 + src/decs.d.ts | 1 - src/defaultArtifacts.ts | 54 - src/errors.ts | 28 +- src/etherscan.ts | 556 - src/globalStore.ts | 8 - src/hdpath.ts | 29 - src/helpers.ts | 3612 ---- src/index.ts | 1120 - src/internal/types.ts | 47 - src/internal/utils.ts | 6 - src/llm.ts | 39 - src/old_diamondbase.json | 275 - src/process/spawn.ts | 11 + src/project/binding.ts | 26 + src/project/root.ts | 8 + src/sourcify.ts | 120 - src/tasks/audit.ts | 358 - src/tasks/compile.ts | 160 - src/toolchain/releases.ts | 26 + src/tron/contract.ts | 93 - src/tron/provider.ts | 438 - src/tron/signer.ts | 288 - src/tron/solc.ts | 190 - src/tron/tronweb.d.ts | 1132 - src/tron/types.ts | 12 - src/tron/utils.ts | 67 - src/type-extensions.ts | 156 - src/utils.ts | 674 - templates/foundry/README.evm.md | 52 + templates/foundry/README.tron.md | 64 + templates/foundry/script/Counter.s.sol | 23 + templates/foundry/src/Counter.sol | 26 + templates/foundry/test/Counter.t.sol | 24 + templates/hardhat/README.evm.md | 41 + templates/hardhat/README.tron.md | 57 + templates/hardhat/contracts/Counter.sol | 25 + templates/hardhat/scripts/deploy.ts | 12 + templates/hardhat/test/Counter.test.ts | 10 + templates/hardhat/tsconfig.json | 11 + test/cli.test.js | 113 + .../hardhat-project/.gitignore | 2 - .../hardhat-project/contracts/Lock.sol | 34 - .../hardhat-project/contracts/depositer.vy | 414 - .../hardhat-project/hardhat.config.ts | 19 - test/fixtures/toolchain-download.js | 8 + test/fixtures/toolchain-install-download.js | 6 + test/fixtures/toolchain-install-faults.js | 38 + test/fixtures/toolchain-install-loader.js | 23 + test/helpers.ts | 51 - test/init-commands.test.js | 249 + test/project.test.ts | 25 - test/template-types.test.js | 30 + test/toolchain.test.js | 206 + tsconfig.json | 19 +- types.ts | 403 - vscode-extension/.vscodeignore | 24 - vscode-extension/LICENSE | 21 - vscode-extension/README.md | 126 - vscode-extension/images/logo.png | Bin 104937 -> 0 bytes vscode-extension/package.json | 57 - vscode-extension/src/extension.ts | 259 - vscode-extension/tsconfig.json | 20 - vscode-extension/vsc-extension-quickstart.md | 21 - 220 files changed, 1637 insertions(+), 167332 deletions(-) delete mode 120000 .agents/skills/sunhat delete mode 100644 .env delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/linux-test.yml delete mode 100644 .github/workflows/release.yml delete mode 100644 .github/workflows/sunhat-dev-publish.yml delete mode 100644 .prettierrc delete mode 100644 .setup.js delete mode 100644 .vscode/settings.json delete mode 100644 .vscode/settings.json.default delete mode 100644 CHANGELOG.md delete mode 100644 CONTRIBUTE.md delete mode 100644 LICENSE create mode 100755 bin/sunhat.js delete mode 100644 docker/Dockerfile delete mode 100644 extendedArtifacts/Address.json delete mode 100644 extendedArtifacts/BeaconProxy.json delete mode 100644 extendedArtifacts/Clones.json delete mode 100644 extendedArtifacts/Context.json delete mode 100644 extendedArtifacts/Diamond.json delete mode 100644 extendedArtifacts/DiamondCutFacet.json delete mode 100644 extendedArtifacts/DiamondERC165Init.json delete mode 100644 extendedArtifacts/DiamondLoupeFacet.json delete mode 100644 extendedArtifacts/DiamondLoupeFacetWithoutSupportsInterface.json delete mode 100644 extendedArtifacts/EIP173Proxy.json delete mode 100644 extendedArtifacts/EIP173ProxyWithReceive.json delete mode 100644 extendedArtifacts/ERC165.json delete mode 100644 extendedArtifacts/ERC165Checker.json delete mode 100644 extendedArtifacts/ERC165Storage.json delete mode 100644 extendedArtifacts/ERC1967Proxy.json delete mode 100644 extendedArtifacts/ERC1967Upgrade.json delete mode 100644 extendedArtifacts/IBeacon.json delete mode 100644 extendedArtifacts/IDiamondCut.json delete mode 100644 extendedArtifacts/IDiamondLoupe.json delete mode 100644 extendedArtifacts/IERC165.json delete mode 100644 extendedArtifacts/IERC173.json delete mode 100644 extendedArtifacts/IERC1822Proxiable.json delete mode 100644 extendedArtifacts/Initializable.json delete mode 100644 extendedArtifacts/LibDiamond.json delete mode 100644 extendedArtifacts/OptimizedTransparentUpgradeableProxy.json delete mode 100644 extendedArtifacts/Ownable.json delete mode 100644 extendedArtifacts/OwnershipFacet.json delete mode 100644 extendedArtifacts/Proxied.json delete mode 100644 extendedArtifacts/Proxy.json delete mode 100644 extendedArtifacts/ProxyAdmin.json delete mode 100644 extendedArtifacts/StorageSlot.json delete mode 100644 extendedArtifacts/TransparentUpgradeableProxy.json delete mode 100644 extendedArtifacts/UUPSUpgradeable.json delete mode 100644 extendedArtifacts/UpgradeableBeacon.json delete mode 100644 extendedArtifacts/UsingDiamondOwner.json delete mode 100644 extendedArtifacts/index.ts delete mode 100644 extendedArtifactsTron/Address.json delete mode 100644 extendedArtifactsTron/BeaconProxy.json delete mode 100644 extendedArtifactsTron/Clones.json delete mode 100644 extendedArtifactsTron/Context.json delete mode 100644 extendedArtifactsTron/Diamond.json delete mode 100644 extendedArtifactsTron/DiamondCutFacet.json delete mode 100644 extendedArtifactsTron/DiamondERC165Init.json delete mode 100644 extendedArtifactsTron/DiamondLoupeFacet.json delete mode 100644 extendedArtifactsTron/DiamondLoupeFacetWithoutSupportsInterface.json delete mode 100644 extendedArtifactsTron/EIP173Proxy.json delete mode 100644 extendedArtifactsTron/EIP173ProxyWithReceive.json delete mode 100644 extendedArtifactsTron/ERC165.json delete mode 100644 extendedArtifactsTron/ERC165Checker.json delete mode 100644 extendedArtifactsTron/ERC165Storage.json delete mode 100644 extendedArtifactsTron/ERC1967Proxy.json delete mode 100644 extendedArtifactsTron/ERC1967Upgrade.json delete mode 100644 extendedArtifactsTron/IBeacon.json delete mode 100644 extendedArtifactsTron/IDiamondCut.json delete mode 100644 extendedArtifactsTron/IDiamondLoupe.json delete mode 100644 extendedArtifactsTron/IERC165.json delete mode 100644 extendedArtifactsTron/IERC173.json delete mode 100644 extendedArtifactsTron/IERC1822Proxiable.json delete mode 100644 extendedArtifactsTron/Initializable.json delete mode 100644 extendedArtifactsTron/LibDiamond.json delete mode 100644 extendedArtifactsTron/OptimizedTransparentUpgradeableProxy.json delete mode 100644 extendedArtifactsTron/Ownable.json delete mode 100644 extendedArtifactsTron/OwnershipFacet.json delete mode 100644 extendedArtifactsTron/Proxied.json delete mode 100644 extendedArtifactsTron/Proxy.json delete mode 100644 extendedArtifactsTron/ProxyAdmin.json delete mode 100644 extendedArtifactsTron/StorageSlot.json delete mode 100644 extendedArtifactsTron/TransparentUpgradeableProxy.json delete mode 100644 extendedArtifactsTron/UUPSUpgradeable.json delete mode 100644 extendedArtifactsTron/UpgradeableBeacon.json delete mode 100644 extendedArtifactsTron/UsingDiamondOwner.json delete mode 100644 extendedArtifactsTron/index.ts delete mode 100644 hardhat.config.ts create mode 100644 package-lock.json delete mode 100644 skills/sunhat/SKILL.md delete mode 100644 skills/sunhat/agents/openai.yaml delete mode 100644 skills/sunhat/workflows/sunhat-audit.md delete mode 100644 skills/sunhat/workflows/sunhat-compile.md delete mode 100644 skills/sunhat/workflows/sunhat-deploy.md delete mode 100644 skills/sunhat/workflows/sunhat-init.md delete mode 100644 skills/sunhat/workflows/sunhat-test.md delete mode 100644 solc_0.6/proxy/Proxied.sol delete mode 100644 solc_0.7/diamond/UsingDiamondOwner.sol delete mode 100644 solc_0.7/diamond/interfaces/IDiamondCut.sol delete mode 100644 solc_0.7/diamond/libraries/LibDiamond.sol delete mode 100644 solc_0.7/proxy/Proxied.sol delete mode 100644 solc_0.8/diamond/Diamond.sol delete mode 100644 solc_0.8/diamond/UsingDiamondOwner.sol delete mode 100644 solc_0.8/diamond/facets/DiamondCutFacet.sol delete mode 100644 solc_0.8/diamond/facets/DiamondLoupeFacet.sol delete mode 100644 solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol delete mode 100644 solc_0.8/diamond/facets/OwnershipFacet.sol delete mode 100644 solc_0.8/diamond/initializers/DiamondERC165Init.sol delete mode 100644 solc_0.8/diamond/interfaces/IDiamondCut.sol delete mode 100644 solc_0.8/diamond/interfaces/IDiamondLoupe.sol delete mode 100644 solc_0.8/diamond/interfaces/IERC165.sol delete mode 100644 solc_0.8/diamond/interfaces/IERC173.sol delete mode 100644 solc_0.8/diamond/libraries/LibDiamond.sol delete mode 100644 solc_0.8/openzeppelin/access/Ownable.sol delete mode 100644 solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol delete mode 100644 solc_0.8/openzeppelin/proxy/Clones.sol delete mode 100644 solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol delete mode 100644 solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol delete mode 100644 solc_0.8/openzeppelin/proxy/Proxy.sol delete mode 100644 solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol delete mode 100644 solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol delete mode 100644 solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol delete mode 100644 solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol delete mode 100644 solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol delete mode 100644 solc_0.8/openzeppelin/proxy/utils/Initializable.sol delete mode 100644 solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol delete mode 100644 solc_0.8/openzeppelin/utils/Address.sol delete mode 100644 solc_0.8/openzeppelin/utils/Context.sol delete mode 100644 solc_0.8/openzeppelin/utils/StorageSlot.sol delete mode 100644 solc_0.8/openzeppelin/utils/introspection/ERC165.sol delete mode 100644 solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol delete mode 100644 solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol delete mode 100644 solc_0.8/openzeppelin/utils/introspection/IERC165.sol delete mode 100644 solc_0.8/proxy/EIP173Proxy.sol delete mode 100644 solc_0.8/proxy/EIP173ProxyWithReceive.sol delete mode 100644 solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol delete mode 100644 solc_0.8/proxy/Proxied.sol delete mode 100644 solc_0.8/proxy/Proxy.sol delete mode 100644 src/DeploymentFactory.ts delete mode 100644 src/DeploymentsManager.ts create mode 100644 src/adapters/foundry.ts create mode 100644 src/adapters/hardhat.ts create mode 100644 src/bin/sunhat.ts delete mode 100644 src/cli.ts create mode 100644 src/cli/parser.ts create mode 100644 src/cli/router.ts create mode 100644 src/commands/init.ts create mode 100644 src/commands/toolchain.ts delete mode 100644 src/decs.d.ts delete mode 100644 src/defaultArtifacts.ts delete mode 100644 src/etherscan.ts delete mode 100644 src/globalStore.ts delete mode 100644 src/hdpath.ts delete mode 100644 src/helpers.ts delete mode 100644 src/index.ts delete mode 100644 src/internal/types.ts delete mode 100644 src/internal/utils.ts delete mode 100644 src/llm.ts delete mode 100644 src/old_diamondbase.json create mode 100644 src/process/spawn.ts create mode 100644 src/project/binding.ts create mode 100644 src/project/root.ts delete mode 100644 src/sourcify.ts delete mode 100644 src/tasks/audit.ts delete mode 100644 src/tasks/compile.ts create mode 100644 src/toolchain/releases.ts delete mode 100644 src/tron/contract.ts delete mode 100644 src/tron/provider.ts delete mode 100644 src/tron/signer.ts delete mode 100644 src/tron/solc.ts delete mode 100644 src/tron/tronweb.d.ts delete mode 100644 src/tron/types.ts delete mode 100644 src/tron/utils.ts delete mode 100644 src/type-extensions.ts delete mode 100644 src/utils.ts create mode 100644 templates/foundry/README.evm.md create mode 100644 templates/foundry/README.tron.md create mode 100644 templates/foundry/script/Counter.s.sol create mode 100644 templates/foundry/src/Counter.sol create mode 100644 templates/foundry/test/Counter.t.sol create mode 100644 templates/hardhat/README.evm.md create mode 100644 templates/hardhat/README.tron.md create mode 100644 templates/hardhat/contracts/Counter.sol create mode 100644 templates/hardhat/scripts/deploy.ts create mode 100644 templates/hardhat/test/Counter.test.ts create mode 100644 templates/hardhat/tsconfig.json create mode 100644 test/cli.test.js delete mode 100644 test/fixture-projects/hardhat-project/.gitignore delete mode 100644 test/fixture-projects/hardhat-project/contracts/Lock.sol delete mode 100644 test/fixture-projects/hardhat-project/contracts/depositer.vy delete mode 100644 test/fixture-projects/hardhat-project/hardhat.config.ts create mode 100644 test/fixtures/toolchain-download.js create mode 100644 test/fixtures/toolchain-install-download.js create mode 100644 test/fixtures/toolchain-install-faults.js create mode 100644 test/fixtures/toolchain-install-loader.js delete mode 100644 test/helpers.ts create mode 100644 test/init-commands.test.js delete mode 100644 test/project.test.ts create mode 100644 test/template-types.test.js create mode 100644 test/toolchain.test.js delete mode 100644 types.ts delete mode 100644 vscode-extension/.vscodeignore delete mode 100644 vscode-extension/LICENSE delete mode 100644 vscode-extension/README.md delete mode 100644 vscode-extension/images/logo.png delete mode 100644 vscode-extension/package.json delete mode 100644 vscode-extension/src/extension.ts delete mode 100644 vscode-extension/tsconfig.json delete mode 100644 vscode-extension/vsc-extension-quickstart.md diff --git a/.agents/skills/sunhat b/.agents/skills/sunhat deleted file mode 120000 index 2f4e963..0000000 --- a/.agents/skills/sunhat +++ /dev/null @@ -1 +0,0 @@ -../../skills/sunhat \ No newline at end of file diff --git a/.env b/.env deleted file mode 100644 index 82f9b45..0000000 --- a/.env +++ /dev/null @@ -1 +0,0 @@ -TS_NODE_FILES=true \ No newline at end of file diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index c14b634..0000000 --- a/.eslintignore +++ /dev/null @@ -1,7 +0,0 @@ -dist/ -deployments/ -artifacts/ -cache/ -coverage/ -node_modules/ -package.json diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 086aadd..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features - sourceType: 'module', // Allows for the use of imports - }, - env: { - commonjs: true, - }, - plugins: ['@typescript-eslint'], - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier', - ], - rules: { - 'no-empty': 'off', - 'no-empty-function': 'off', - '@typescript-eslint/no-empty-function': 'off', - }, -}; diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index fc3b4b7..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Bug Report -description: Report a bug -type: "bug" - -body: - - type: textarea - attributes: - label: What happened? - description: Please provide as much information as possible, this helps us address the issue. - validations: - required: true - - type: textarea - attributes: - label: What did you expect to happen? - validations: - required: true - - type: textarea - attributes: - label: How can we reproduce it (as minimally and precisely as possible)? - description: Please provide steps to reproduce. Provide code that can be run if possible. - validations: - required: true - - type: input - attributes: - label: sunhat version - description: What version or commit of the library was used - validations: - required: true - - type: input - attributes: - label: Operating system - - type: textarea - attributes: - label: Any additional info you think would be helpful for fixing this bug diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index cf6af69..0000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,5 +0,0 @@ -blank_issues_enabled: true -contact_links: - - name: Questions or general help 💬 - url: https://github.com/sun-protocol/sunhat/discussions - about: Please ask and answer questions here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 1b1de6f..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Feature Request -description: Request a new feature or enhancement -type: "feature" - -body: - - type: textarea - attributes: - label: What feature would you like to be added? - description: Please describe the desired feature. Be descriptive, provide examples and if possible, provide a proposed solution. - validations: - required: true - - - type: textarea - attributes: - label: Why is this needed? - description: Why is it important that this feature is implemented? What problem or need does it solve? - validations: - required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index df41ac4..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,12 +0,0 @@ -## Why are these changes needed? - - - -## Related issue number - - - -## Checks - -- [ ] I've added tests (if relevant) corresponding to the changes introduced in this PR. -- [ ] I've made sure all auto checks have passed. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..cd5a647 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,34 @@ +name: ci + +on: + push: + pull_request: + +permissions: + contents: read + +jobs: + node: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: 24.22.1 + cache: npm + - run: npm ci + - run: npm test + - run: npm run test:templates + - run: npm run pack:check + + windows-toolchain: + runs-on: windows-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: 24.22.1 + cache: npm + - run: npm ci + - run: npm run build + - run: node --test test/toolchain.test.js diff --git a/.github/workflows/linux-test.yml b/.github/workflows/linux-test.yml deleted file mode 100644 index 2272623..0000000 --- a/.github/workflows/linux-test.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: CI - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - name: Build and Test ubuntu - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v4 - with: - version: 10 - - name: build - run: | - pnpm install - pnpm run build - - name: test - run: | - pnpm run test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index d552149..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,47 +0,0 @@ -# .github/workflows/release.yml - -name: release.yml - -on: - release: - types: [published] - -jobs: - build-and-publish: - runs-on: ubuntu-latest - permissions: - id-token: write - contents: read - - environment: release - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '22' - registry-url: 'https://registry.npmjs.org/' - - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10 - - - name: Check and Update npm - run: | - echo "Initial npm version:" - npm --version - npm install -g npm@latest - echo "Updated npm version:" - npm --version - - - name: Install dependencies and build - run: | - pnpm install - pnpm run build - - - name: Publish to npm - run: npm publish --provenance diff --git a/.github/workflows/sunhat-dev-publish.yml b/.github/workflows/sunhat-dev-publish.yml deleted file mode 100644 index fccf309..0000000 --- a/.github/workflows/sunhat-dev-publish.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Publish sunaget/sunhat-dev - -on: - workflow_dispatch: - inputs: - image_tag: - description: 'tag of image(e.g. 0.1.0)' - required: true - type: string - -jobs: - build-and-push: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - environment: release - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v5 - with: - images: sunagent/sunhat-dev - tags: | - type=sha,prefix=,suffix=,format=short - type=raw,value=${{ github.event.inputs.image_tag }} - - - name: Build and push Docker image - uses: docker/build-push-action@v5 - with: - context: . - platforms: linux/amd64,linux/arm64 - file: ./docker/Dockerfile - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max diff --git a/.gitignore b/.gitignore index 634a64c..0ecfca7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,5 @@ -dist -node_modules -pnpm-lock.yaml -artifacts -cache -extendedArtifacts/ -package-lock.json -.vscode/ -*.swp -*.swo -.pnpm-store -out/ -*.vsix +/dist/ +/node_modules/ +/.sunhat/toolchains/ +/*.tgz +**/.DS_Store diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 650cb88..0000000 --- a/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "singleQuote": true, - "semi": true -} diff --git a/.setup.js b/.setup.js deleted file mode 100644 index d91a51e..0000000 --- a/.setup.js +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env node -const fs = require('fs'); -function copyFromDefault(p) { - if (!fs.existsSync(p)) { - const defaultFile = `${p}.default`; - if (fs.existsSync(defaultFile)) { - fs.copyFileSync(`${p}.default`, p); - } - } -} -['.env', '.vscode/settings.json'].map(copyFromDefault); diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 506e01d..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.codeActionsOnSave": { - "source.fixAll": "explicit" - }, - "solidity.linter": "solhint", - "solidity.enableLocalNodeCompiler": false, - "solidity.compileUsingRemoteVersion": "v0.7.1+commit.f4a555be", - "solidity.packageDefaultDependenciesContractsDirectory": "", - "solidity.enabledAsYouTypeCompilationErrorCheck": true, - "solidity.validationDelay": 1500, - "solidity.packageDefaultDependenciesDirectory": "node_modules", - "mochaExplorer.env": { - "HARDHAT_CONFIG": "hardhat.config.ts", - "HARDHAT_COMPILE": "true" - }, - "mochaExplorer.require": ["ts-node/register/transpile-only"] -} diff --git a/.vscode/settings.json.default b/.vscode/settings.json.default deleted file mode 100644 index 6d63ca5..0000000 --- a/.vscode/settings.json.default +++ /dev/null @@ -1,19 +0,0 @@ -{ - "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.codeActionsOnSave": { - "source.fixAll": true - }, - "solidity.linter": "solhint", - "solidity.enableLocalNodeCompiler": false, - "solidity.compileUsingRemoteVersion": "v0.7.1+commit.f4a555be", - "solidity.packageDefaultDependenciesContractsDirectory": "", - "solidity.enabledAsYouTypeCompilationErrorCheck": true, - "solidity.validationDelay": 1500, - "solidity.packageDefaultDependenciesDirectory": "node_modules", - "mochaExplorer.env": { - "HARDHAT_CONFIG": "hardhat.config.ts", - "HARDHAT_COMPILE": "true" - }, - "mochaExplorer.require": ["ts-node/register/transpile-only"] -} diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index c86fcd5..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,69 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/). - -## [Unreleased] - -### Added -- Codex CLI and IDE skill discovery through `.agents/skills/sunhat`. -- Codex skill metadata, invocation guidance, and npm packaging for `skills/sunhat`. - -## [1.5.0] - 2026-01-21 - -### Added -- IDE Skills integration for AI-powered development. -- Integration guides for Claude Code, Google Antigravity, OpenCode, and Cursor. - -## [1.4.0] - 2025-12-31 - -### Added -- Integrated Hardhat compilation error reporting for Solidity and Vyper. -- Enhanced VS Code extension to display compilation diagnostics (red squiggles). -- Refactored Hardhat tasks (audit, compile) into separate module files. - -## [1.3.0] - 2025-12-19 - -### Added -- SunHat CLI as Hardhat CLI alternative -- Project Scaffolding and Automated Setup -- Developer Documents Updated -- Official Docker Image Published - -### Fixed -- Release Workflow - -## [1.2.0] - 2025-12-5 - -### Added -- Support LLM Contract Audit -- Sunhat VSCode Extension v0.1.1 -- Developer Documents Updated - -## [1.1.0] - 2025-11-18 - -### Added -- Support tronsolc v0.8.25 -- Developer Pack v0.0.1 -- Developer Documents Updated - -## [1.0.1] - 2025-11-06 - -### Added -- Developer Documents Updated -- Release Workflow - -## [1.0.0] - 2025-11-03 - -### Added -- support vyper compile -- support multi-solc-version compile -- support base58Address output -- support bandwith output -- CI workflow and test case -- Developer Documents - -### Fixed -- Some Code compatibility issue diff --git a/CONTRIBUTE.md b/CONTRIBUTE.md deleted file mode 100644 index 7fc06e6..0000000 --- a/CONTRIBUTE.md +++ /dev/null @@ -1,29 +0,0 @@ -## How to Contribute - -We welcome contributions from everyone! Contributions to `sunhat` are released under the terms of the [MIT License](https://github.com/sun-protocol/sunhat/blob/main/LICENSE). By submitting a pull request, you agree to license your contribution under this license. - -### Reporting Bugs - -If you find a bug, please open an issue on our GitHub repository. When you are creating a bug report, please include: - -* A clear and descriptive title. -* A detailed description of the problem, including the expected and actual behavior. -* Steps to reproduce the bug. -* Information about your environment (e.g., operating system, `sunhat` version). - -### Suggesting Enhancements - -If you have an idea for a new feature or an improvement to an existing one, please open an issue to discuss it. This allows us to coordinate our efforts and prevent duplication of work. - -### Pull Request Process - -We follow a standard GitHub fork and pull request workflow. - -1. **Fork the repository** to your own GitHub account. -2. **Clone your fork** to your local machine. -3. **Create a new branch** for your changes. It's good practice to name your branch something descriptive, like `fix-authentication-bug` or `add-user-profiles-feature`. -4. **Make your changes**. Ensure that your code adheres to the project's coding standards. -5. **Write clear and concise commit messages**. A good commit message explains why a change was made. -6. **Push your changes** to your fork on GitHub. -7. **Open a pull request** from your branch to the `main` branch of the `sunhat` repository. -8. **Respond to feedback**. The project maintainers will review your pull request and may suggest changes. Be open to discussion and be prepared to make further modifications. diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 7520573..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Ronan Sandford - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index e0228c3..c59ef89 100644 --- a/README.md +++ b/README.md @@ -1,276 +1,145 @@ # Sunhat -[![CI Status](https://github.com/sun-protocol/sunhat/actions/workflows/linux-test.yml/badge.svg)](https://github.com/sun-protocol/sunhat/actions) -![NPM Version](https://img.shields.io/npm/v/%40sun-protocol%2Fsunhat) -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -**An All-in-One Toolkit for the Complete TRON Smart Contract Lifecycle** +Sunhat's npm package is `sunhat`; these instructions use version `2.0.0`. It binds a project to Hardhat 2 or Foundry and to an EVM or TRON target through `sunhat.toml`. It handles project initialization, binding, command routing, and child-process management without replacing the framework's compiler, test runner, or argument parser. -Sunhat is a comprehensive [Hardhat](https://hardhat.org) plugin designed to provide a seamless, end-to-end development experience on [TRON](https://tron.network/). It manages every stage of your project—from writing code in multiple languages to deploying with confidence—all within a single, unified workflow. +## Global command prerequisites -## What is it for? +To run `sunhat ...` directly in a terminal, install `sunhat@2.0.0` from npm globally and ensure npm's global executable directory is on `PATH`. The CLI requires Node.js `>=20.11`. -This [hardhat](https://hardhat.org) plugin adds a mechanism to deploy contracts to any network, Especially to [Tron](https://tron.network/) , keeping track of them and replicating the same environment for testing. - -### A Closed-Loop Lifecycle: Develop, Test, Deploy - -Sunhat creates a complete, closed-loop process, ensuring consistency and reliability from the first line of code to the final on-chain transaction. - -* **DEVELOP: Flexible & Powerful Compilation** - * Write your smart contracts in the language you prefer with multi-language support for **Solidity** and **Vyper**. - * Compile your code for maximum compatibility and performance using multiple compiler versions, including standard **solc** and the TRON-specific **tron-solc**. - -* **TEST: Robust & Automated Validation** - * Leverage automated, cross-framework testing. Sunhat integrates seamlessly with both **Hardhat**'s built-in testing environment and the high-speed **Foundry** toolkit. - * Write clearer, more maintainable tests using named accounts instead of hardcoded addresses. - -* **DEPLOY: Confident & Trackable** - * Deploy your contracts reliably to any TRON network (Mainnet, Shasta, etc.). The plugin tracks all deployments, allowing you to manage and upgrade your contracts with ease. - - -### Core Features at a Glance - -* **Unified Development Environment**: Supports multiple compilers (**solc**, **tron-solc**) and languages (**Solidity**, **Vyper**), giving your team the flexibility to use the best tools for the job. - -* **Cross-Framework Automated Testing**: Natively supports test suites written for both **Hardhat** and **Foundry**, eliminating the need to choose between frameworks. - -* **Deterministic Deployments**: Reliably deploy contracts and track their history. This allows you to replicate the exact same on-chain state for testing, staging, or disaster recovery. - -* **Named Accounts**: Replace ambiguous addresses (`accounts[0]`) with human-readable names (`deployer`, `tokenOwner`). This makes scripts and tests cleaner and simplifies multi-network configuration. - -* **TRON-Specific Network Data**: Gain access to crucial network-specific parameters directly within your testing and deployment scripts, enabling more accurate pre-deployment simulations. - ---- - -## QuickStart - -This guide walks you through setting up sunhat in a new project from scratch. -> You can get a complete demo [here](https://github.com/sun-protocol/sunhat-demo) - ---- +```bash +npm install --global sunhat@2.0.0 +sunhat --version +sunhat --help +``` -### Installation +`sunhat --version` should report `sunhat 2.0.0`. Global installation is a separate step; `sunhat init` does not perform it. -This guide walks you through installing sunhat from scratch. +These commands are available without a project binding: -#### Prerequisites +| Command | Purpose | +| --- | --- | +| `sunhat`, `sunhat --help`, `sunhat -h` | Print CLI usage and initialization defaults. | +| `sunhat --version`, `sunhat -V` | Print the version of the invoked Sunhat executable. | +| `sunhat init [options] [path]` | Create a project, or bind an existing project with `--adopt`. | -* **Node.js**: Version `22.14.0` or higher. - > [Download Node.js](https://nodejs.org/en/download) +All other commands require a valid `sunhat.toml` in the current directory or an ancestor. Run them from the project root or one of its subdirectories. Global Sunhat still resolves Hardhat from the project's dependencies and Foundry from the project's `.sunhat/` toolchain; global installation does not install either framework for the project. -#### Install Sunhat +Install `sunhat@2.0.0` as an exact local development dependency using the project setup steps below. Then use `npx --no-install sunhat ...` to run that local copy without a global installation. The examples below use the global `sunhat` command; replace it with `npx --no-install sunhat` for local use. `npm run build` and `npm test` resolve the local executable automatically. -You can install Sunhat by executing the following command: +The global CLI does not automatically delegate to the project's local Sunhat copy. Use `sunhat --version` and `npx --no-install sunhat --version` to check which CLI version each invocation uses. -```bash -npm install -g @sun-protocol/sunhat -``` +## Initialize or adopt a project -#### Install Optional Extensions +New projects use Foundry and the TRON target by default. Pass `--framework hardhat` to select Hardhat, or `--target evm` to select an EVM target: -For Vyper compiler support: -> [Vyper Installation Guide](https://docs.vyperlang.org/en/stable/installing-vyper.html) ```bash -pip install vyper==0.2.8 +sunhat init contracts +sunhat init --target evm contracts-evm +sunhat init --framework hardhat hardhat-tron +sunhat init --framework hardhat --target evm hardhat-evm ``` -For Foundry test support: -> [Foundry Installation Guide](https://book.getfoundry.sh/getting-started/installation) +Adopting an existing project does not modify its native configuration. Adoption also defaults to the TRON target; pass `--target evm` explicitly for an EVM project: ```bash -# Install Foundry -curl -L https://foundry.paradigm.xyz | bash -# Set Foundry to the nightly channel -foundryup --install nightly -``` - ---- - -### Step 1: Configure Hardhat - -Add sunhat to your hardhat.config.ts: - -```ts -import { HardhatUserConfig } from '@sun-protocol/sunhat'; - -const config: HardhatUserConfig = { - solidity: { - compilers: [ - { - version: '0.8.23', - optimizer: { - enabled: true, // enabled for optimizer - runs: 999999, // runs time for optimizer run - }, - }, - ], - }, - // settings for different networks - networks: { - tron: { - url: 'https://nile.trongrid.io/jsonrpc', // tron mainnet rpc url - tron: true, // enable tron network - deploy: ['deployTron/'], // folder for tron deploy scripts - accounts: [`${process.env.PRIVATE_KEY}`], // account private key for deploy - }, - }, -}; - -export default config; -``` - ---- - -### Step 2: Create Your First Contract - -Create a simple contract in `contracts/Lock.sol`: - -```solidity -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.0; - -contract Lock { - uint public unlockTime; - address payable public owner; - - event Withdrawal(uint amount, uint when); - - constructor(uint _unlockTime) payable { - require(_unlockTime > block.timestamp, "Unlock time should be in the future"); - unlockTime = _unlockTime; - owner = payable(msg.sender); - } - - function withdraw() public { - require(block.timestamp >= unlockTime, "You can't withdraw yet"); - require(msg.sender == owner, "You aren't the owner"); - emit Withdrawal(address(this).balance, block.timestamp); - owner.transfer(address(this).balance); - } -} +sunhat init --adopt . +sunhat init --framework hardhat --adopt --target evm . ``` ---- - -### Step 3: Create Deploy Directory - -Create a `deployTron/` directory in your project root. +The binding file is the sole source of truth for command routing: ---- - -### Step 4: Write Your First Deploy Script - -Create `deployTron/1.ts`: - -```ts -module.exports = async ({ - getNamedAccounts, - deployments, - getChainId, - getUnnamedAccounts, -}) => { - const {deploy} = deployments; - const {deployer} = await getNamedAccounts(); - - // the following will only deploy "GenericMetaTxProcessor" if the contract was never deployed or if the code changed since last deployment - const res = await deploy('Lock', { - from: deployer, - gasLimit: 4000000, - args: [1893456000], - tags: 'lumi', - }); - console.log(res) -}; - -module.exports.tags = ['lumi']; +```toml +[project] +framework = "hardhat" +target = "evm" ``` ---- - -### Step 5: Compile and Deploy +Initialization uses exclusive file creation. It fails if a destination file already exists and never overwrites unknown content. Dependency installation remains under the project's control. -Compile your contracts: +After initialization, enter the project directory and install its dependencies: ```bash -npx hardhat compile +cd contracts +npm install --save-dev --save-exact sunhat@2.0.0 ``` -Deploy to tron network: +This command installs the project's declared dependencies and pins its local Sunhat to `2.0.0` from npm. The current scaffold initially writes a `file:` reference to the Sunhat installation that created it; the command replaces that reference so the project no longer depends on that installation path. Run the same installation command in an adopted project's root. -```bash -npx hardhat --network tron deploy --tags lumi -``` +## Project commands ---- +The following lists use a globally installed Sunhat and require the project binding described above. Native command availability and options are determined by the project's installed framework and plugins. -### Step 6: Verify Deployment +### Hardhat projects: EVM and TRON -Check the `deployments/` directory for your deployment files. You should see: -``` -├── deployments -│   └── tron -│   └── Lock.json -``` +Complete the project dependency installation above first. Hardhat must be declared with an exact version matching the installed Hardhat 2 package. ---- +| Command | Purpose | +| --- | --- | +| `sunhat compile [--force]` | Compile contracts, optionally forcing recompilation. | +| `sunhat test [--grep Counter]` | Run all tests or matching tests. | +| `sunhat run scripts/deploy.ts` | Run the deployment script on the configured network. | +| `sunhat node` | Run the configured Hardhat node task. | +| `sunhat console [--no-compile]` | Open the Hardhat console. | +| `sunhat flatten contracts/Counter.sol` | Print flattened contract source. | +| `sunhat clean` | Remove Hardhat artifacts and cache. | +| `sunhat help [task]` | List native tasks or show help for one task. | +| `sunhat [args...]` | Forward a task registered by an installed plugin. | -## IDE Skills Integration +### Foundry projects: EVM and TRON -Sunhat exposes a specialized **Skills** interface that acts as a "driver" for AI agents. By pointing your AI assistant to the skill definition in `skills/sunhat/`, you unlock expert-level capabilities for testing, deploying, and auditing TRON contracts autonomously. - -``` -skills/ -└── sunhat/ - ├── SKILL.md # Main entry point - └── workflows/ - ├── sunhat-init.md - ├── sunhat-compile.md - ├── sunhat-test.md - ├── sunhat-deploy.md - └── sunhat-audit.md -``` +Install the project toolchain with `sunhat toolchain install` before running native commands. The installer requires access to the pinned GitHub release and `tar` on macOS/Linux or PowerShell on Windows. It supports macOS/Linux arm64 and x64, and Windows x64. -### Supported IDEs +| Command | Purpose | Target | +| --- | --- | --- | +| `sunhat toolchain install` | Download and verify the pinned project toolchain. | EVM, TRON | +| `sunhat toolchain check` | Verify the installed binary digests. | EVM, TRON | +| `sunhat toolchain info` | Print the installed toolchain metadata. | EVM, TRON | +| `sunhat build [--sizes]` | Compile contracts and optionally report sizes. | EVM, TRON | +| `sunhat test [-vvv]` | Run tests, optionally with verbose traces. | EVM, TRON | +| `sunhat test --match-contract CounterTest` | Run one test contract. | EVM, TRON | +| `sunhat test --gas-report` | Request the selected toolchain's resource report. | EVM, TRON | +| `sunhat snapshot` | Record resource usage snapshots. | EVM, TRON | +| `sunhat coverage` | Generate a coverage report. | EVM, TRON | +| `sunhat script ` | Run a Foundry script. | EVM, TRON | +| `sunhat create ` | Deploy a contract with the selected toolchain. | EVM, TRON | +| `sunhat clean` | Remove build artifacts and cache. | EVM, TRON | +| `sunhat fmt --check` | Check Solidity formatting. | EVM, TRON | +| `sunhat inspect abi` | Print a contract's ABI. | EVM, TRON | +| `sunhat cast [args...]` | Run Cast from the project toolchain. | EVM, TRON | +| `sunhat anvil [args...]` | Start the project-pinned local EVM node. | EVM only | +| `sunhat chisel [args...]` | Open the project-pinned Solidity REPL. | EVM only | +| `sunhat help [command]` | Show native Forge help. | EVM, TRON | -| IDE | Setup | -|-----|-------| -| **Codex CLI / IDE** | Use `.agents/skills/sunhat`; this repository includes the discovery link. Invoke with `$sunhat` or let Codex select it automatically. | -| **Claude Code** | Place `skills/sunhat` in project root. Claude auto-discovers `SKILL.md`. | -| **Google Antigravity** | Place `skills/sunhat` in `.agent/skills/sunhat`. Antigravity auto-discovers `SKILL.md`. | -| **OpenCode** | Place `skills/sunhat` in `.opencode/skills/sunhat`. OpenCode auto-discovers `SKILL.md`. | -| **Cursor** | Copy `SKILL.md` content into `.cursorrules` or reference workflow paths. | +Other native Forge commands are forwarded as `sunhat [args...]`. The `toolchain` commands above are managed by Sunhat only for Foundry bindings; in a Hardhat project, the same arguments are forwarded to Hardhat as a native task. -### Codex Setup +Sunhat does not rewrite core commands across frameworks. Compile Hardhat projects with `sunhat compile` and Foundry projects with `sunhat build`. Based on the `sunhat.toml` binding, Sunhat forwards each command and its arguments directly to the selected framework. The former `sunhat hardhat ...` and `sunhat foundry ...` three-part command forms are no longer supported. Anvil and Chisel are unavailable for TRON Foundry projects. -Codex discovers repository-scoped skills from `.agents/skills`. This repository maps `.agents/skills/sunhat` to the canonical `skills/sunhat` directory, so Codex CLI and the Codex IDE extension load the skill automatically when opened from this repository. +The target project must install Hardhat major version 2. The current template pins `hardhat@2.29.1`, which supports Node.js 24. Sunhat resolves the absolute Hardhat entry point from the project's dependencies and does not invoke `npx`. -For a project with a local `@sun-protocol/sunhat` dependency, copy `node_modules/@sun-protocol/sunhat/skills/sunhat` to `.agents/skills/sunhat`. You can also ask Codex to install the skill from this repository with `$skill-installer`. +Hardhat TRON projects require a running Docker daemon. Their generated configuration selects the `tre` network, compiles with `tron-solc`, and starts `tronbox/tre:dev` automatically for `sunhat test`. Set `TRE_URL` and `TRE_PRIVATE_KEY` to use an existing TRE instance instead of the generated local defaults. -Run `/skills` to confirm discovery, then invoke the skill explicitly with `$sunhat` or describe a matching Sunhat task. See the [official Codex Skills documentation](https://developers.openai.com/codex/skills/) for discovery and installation details. - -### Example Usage +Hardhat dependencies use exact versions published on the npm registry. Sunhat's project dependency is pinned to `sunhat@2.0.0` by the installation step above. Foundry binaries are installed separately from pinned GitHub releases. In a Foundry project, install and check the toolchain with: +```bash +sunhat toolchain install +sunhat toolchain check ``` -# Claude Code -> "Run the tests for the Lock contract using Sunhat." - -# Antigravity -> "Deploy the Token contract to Nile testnet." -# Codex -> "$sunhat compile and test this TRON project." -``` +EVM projects download `foundry-rs/foundry@v1.8.6`. TRON projects download the public release for `elsvv/foundry-tron@9ea07db4b342fd606f6f7c3f99be1757e90d5e90`. Sunhat verifies the archive against a pinned SHA-256 digest before extracting it to `.sunhat/toolchains/`, then verifies the selected binary's digest on every invocation. -The AI agent will discover the skill, read the appropriate workflow, and execute the task deterministically. +Installation stages all binaries on the project's toolchain filesystem before replacing an existing installation. The previous directory is kept until the new lock file is committed. If activation or lock replacement fails, Sunhat restores the previous directory; if restoration also fails, it retains the backup and reports its location. ---- +Child processes receive a structured argv array and run with `shell: false`. They inherit stdout and stderr, and Sunhat forwards SIGINT, SIGTERM, and the native exit status. ## Development -To dive deeper into advanced topics of the sunhat project lifecycle, please see the [Documentation](https://hat-docs.sunagent.ai/) for guides and reference. ---- +Run these commands from a Sunhat source checkout: -## How to Contribute +```bash +npm install +npm test +``` -We welcome contributions from everyone! Contributions to `sunhat` are released under the terms of the [MIT License](https://github.com/sun-protocol/sunhat/blob/main/LICENSE). By submitting a pull request, you agree to license your contribution under this license. +`npm test` builds Sunhat, initializes all four framework/target combinations, and exercises the commands listed in the generated READMEs, npm scripts, argument forwarding, subdirectory resolution, exit codes, and toolchain rejection paths. Framework executables and download responses are fixtures; the suite does not run Solidity compilers, Docker/TRE, or real deployments. -To contribute, see [CONTRIBUTE.md](https://github.com/sun-protocol/sunhat/blob/main/CONTRIBUTE.md) +Run `npm run test:templates` to generate fresh Hardhat EVM and TRON projects, install their declared dependencies, and check both with `tsc --noEmit`. This integration suite requires access to the npm registry and checks dependency declarations without enabling `skipLibCheck`. It does not require Docker or a blockchain connection. diff --git a/bin/sunhat.js b/bin/sunhat.js new file mode 100755 index 0000000..cc13f62 --- /dev/null +++ b/bin/sunhat.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +import '../dist/bin/sunhat.js'; diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index b60c863..0000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -FROM ubuntu:22.04 - -# default shell -SHELL ["/bin/bash", "-c"] - -# base deps -RUN apt-get update \ - && apt-get install -y python3 python3-pip make g++ build-essential wget curl ca-certificates git vim\ - && rm -rf /var/lib/apt/lists/* - -# nvm & nodejs -RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash -RUN source /root/.nvm/nvm.sh \ - && nvm install 22 \ - && npm install -g npm@latest \ - && npm install -g pnpm \ - && npm install -g yarn - -# vyper -RUN pip3 install vyper==0.2.8 - -# foundry -RUN curl -L https://foundry.paradigm.xyz | bash -RUN /root/.foundry/bin/foundryup --install nightly - -WORKDIR /workspace diff --git a/extendedArtifacts/Address.json b/extendedArtifacts/Address.json deleted file mode 100644 index 8926010..0000000 --- a/extendedArtifacts/Address.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "contractName": "Address", - "sourceName": "solc_0.8/openzeppelin/utils/Address.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a5abfb54afc7d68615613b74043b5bb824bb92f1b6d54853f98a33bbf98e97bf64736f6c634300080a0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a5abfb54afc7d68615613b74043b5bb824bb92f1b6d54853f98a33bbf98e97bf64736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Collection of functions related to the address type", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA5 0xAB 0xFB SLOAD 0xAF 0xC7 0xD6 DUP7 ISZERO PUSH2 0x3B74 DIV EXTCODESIZE JUMPDEST 0xB8 0x24 0xBB SWAP3 CALL 0xB6 0xD5 BASEFEE MSTORE8 0xF9 DUP11 CALLER 0xBB 0xF9 DUP15 SWAP8 0xBF PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "199:8061:12:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;199:8061:12;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA5 0xAB 0xFB SLOAD 0xAF 0xC7 0xD6 DUP7 ISZERO PUSH2 0x3B74 DIV EXTCODESIZE JUMPDEST 0xB8 0x24 0xBB SWAP3 CALL 0xB6 0xD5 BASEFEE MSTORE8 0xF9 DUP11 CALLER 0xBB 0xF9 DUP15 SWAP8 0xBF PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "199:8061:12:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "functionCall(address,bytes memory)": "infinite", - "functionCall(address,bytes memory,string memory)": "infinite", - "functionCallWithValue(address,bytes memory,uint256)": "infinite", - "functionCallWithValue(address,bytes memory,uint256,string memory)": "infinite", - "functionDelegateCall(address,bytes memory)": "infinite", - "functionDelegateCall(address,bytes memory,string memory)": "infinite", - "functionStaticCall(address,bytes memory)": "infinite", - "functionStaticCall(address,bytes memory,string memory)": "infinite", - "isContract(address)": "infinite", - "sendValue(address payable,uint256)": "infinite", - "verifyCallResult(bool,bytes memory,string memory)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/Address.sol\":\"Address\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/BeaconProxy.json b/extendedArtifacts/BeaconProxy.json deleted file mode 100644 index 15a1562..0000000 --- a/extendedArtifacts/BeaconProxy.json +++ /dev/null @@ -1,4649 +0,0 @@ -{ - "contractName": "BeaconProxy", - "sourceName": "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405260405162000a9338038062000a938339810160408190526200002691620004c6565b6200005360017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5162000594565b60008051602062000a4c83398151915214620000735762000073620005ba565b620000818282600062000089565b505062000641565b62000094836200015e565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a2600082511180620000d65750805b15620001595762000157836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001459190620005d0565b83620002ff60201b620000291760201c565b505b505050565b62000174816200032e60201b620000551760201c565b620001d45760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6200024e816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000217573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023d9190620005d0565b6200032e60201b620000551760201c565b620002b55760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401620001cb565b80620002de60008051602062000a4c83398151915260001b6200033d60201b620000711760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b606062000327838360405180606001604052806027815260200162000a6c6027913962000340565b9392505050565b6001600160a01b03163b151590565b90565b60606001600160a01b0384163b620003aa5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001cb565b600080856001600160a01b031685604051620003c79190620005ee565b600060405180830381855af49150503d806000811462000404576040519150601f19603f3d011682016040523d82523d6000602084013e62000409565b606091505b5090925090506200041c82828662000426565b9695505050505050565b606083156200043757508162000327565b825115620004485782518084602001fd5b8160405162461bcd60e51b8152600401620001cb91906200060c565b80516001600160a01b03811681146200047c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004b45781810151838201526020016200049a565b83811115620001575750506000910152565b60008060408385031215620004da57600080fd5b620004e58362000464565b60208401519092506001600160401b03808211156200050357600080fd5b818501915085601f8301126200051857600080fd5b8151818111156200052d576200052d62000481565b604051601f8201601f19908116603f0116810190838211818310171562000558576200055862000481565b816040528281528860208487010111156200057257600080fd5b6200058583602083016020880162000497565b80955050505050509250929050565b600082821015620005b557634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620005e357600080fd5b620003278262000464565b600082516200060281846020870162000497565b9190910192915050565b60208152600082518060208401526200062d81604085016020870162000497565b601f01601f19169190910160400192915050565b6103fb80620006516000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610074565b610127565b565b606061004e838360405180606001604052806027815260200161039f6027913961014b565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012291906102cb565b905090565b3660008037600080366000845af43d6000803e808015610146573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b6101f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161021e9190610331565b600060405180830381855af49150503d8060008114610259576040519150601f19603f3d011682016040523d82523d6000602084013e61025e565b606091505b509150915061026e828286610278565b9695505050505050565b6060831561028757508161004e565b8251156102975782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ed919061034d565b6000602082840312156102dd57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461004e57600080fd5b60005b8381101561031c578181015183820152602001610304565b8381111561032b576000848401525b50505050565b60008251610343818460208701610301565b9190910192915050565b602081526000825180602084015261036c816040850160208701610301565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220744bcc0768461f75b2be5663808bceb137cf5b1106770132a21a570e5decafc064736f6c634300080a0033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", - "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b610127565b565b606061004e838360405180606001604052806027815260200161039f6027913961014b565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012291906102cb565b905090565b3660008037600080366000845af43d6000803e808015610146573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b6101f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161021e9190610331565b600060405180830381855af49150503d8060008114610259576040519150601f19603f3d011682016040523d82523d6000602084013e61025e565b606091505b509150915061026e828286610278565b9695505050505050565b6060831561028757508161004e565b8251156102975782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ed919061034d565b6000602082840312156102dd57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461004e57600080fd5b60005b8381101561031c578181015183820152602001610304565b8381111561032b576000848401525b50505050565b60008251610343818460208701610301565b9190910192915050565b602081526000825180602084015261036c816040850160208701610301565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220744bcc0768461f75b2be5663808bceb137cf5b1106770132a21a570e5decafc064736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}. The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't conflict with the storage layout of the implementation behind the proxy. _Available since v3.4._", - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the proxy with `beacon`. If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor. Requirements: - `beacon` must be a contract with the interface {IBeacon}." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_579": { - "entryPoint": null, - "id": 579, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setBeacon_447": { - "entryPoint": 350, - "id": 447, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeBeaconToAndCall_485": { - "entryPoint": 137, - "id": 485, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@functionDelegateCall_1437": { - "entryPoint": 767, - "id": 1437, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_1472": { - "entryPoint": 832, - "id": 1472, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_1552": { - "entryPoint": 829, - "id": 1552, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_1227": { - "entryPoint": 814, - "id": 1227, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_1503": { - "entryPoint": 1062, - "id": 1503, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 1124, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 1488, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 1222, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 1518, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 1548, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 1428, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 1175, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x01": { - "entryPoint": 1466, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1153, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4030:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:117:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "84:22:16", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "99:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "93:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "93:13:16" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "84:5:16" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "169:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "178:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "181:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "171:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "171:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "171:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "128:5:16" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "139:5:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "154:3:16", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "150:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "150:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "163:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "146:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "146:19:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "135:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "135:31:16" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "125:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "125:42:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "118:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "118:50:16" - }, - "nodeType": "YulIf", - "src": "115:70:16" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:16", - "type": "" - } - ], - "src": "14:177:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "228:95:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "245:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "257:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "248:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "248:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "238:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "238:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "238:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "285:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "288:4:16", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "278:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "278:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "278:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "302:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "302:15:16" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "196:127:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "381:205:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "391:10:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "400:1:16", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "395:1:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "460:63:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "485:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "490:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "481:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "481:11:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "504:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "509:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "500:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "500:11:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "494:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "494:18:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "474:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "474:39:16" - }, - "nodeType": "YulExpressionStatement", - "src": "474:39:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "421:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "424:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "418:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "418:13:16" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "432:19:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "434:15:16", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "443:1:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "446:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "439:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "439:10:16" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "434:1:16" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "414:3:16", - "statements": [] - }, - "src": "410:113:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "549:31:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "562:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "567:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "558:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "558:16:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "576:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "551:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "551:27:16" - }, - "nodeType": "YulExpressionStatement", - "src": "551:27:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "538:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "541:6:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "535:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "535:13:16" - }, - "nodeType": "YulIf", - "src": "532:48:16" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "359:3:16", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "364:3:16", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "369:6:16", - "type": "" - } - ], - "src": "328:258:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "698:861:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "744:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "753:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "756:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "746:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "746:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "746:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "719:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "728:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "715:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "715:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "740:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "711:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "711:32:16" - }, - "nodeType": "YulIf", - "src": "708:52:16" - }, - { - "nodeType": "YulAssignment", - "src": "769:50:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "809:9:16" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "779:29:16" - }, - "nodeType": "YulFunctionCall", - "src": "779:40:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "769:6:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "828:39:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "852:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "863:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "848:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "848:18:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "842:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "842:25:16" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "832:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "876:28:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "894:2:16", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "898:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "890:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "890:10:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "902:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "886:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "886:18:16" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "880:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "931:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "940:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "943:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "933:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "933:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "933:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "919:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "927:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "916:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "916:14:16" - }, - "nodeType": "YulIf", - "src": "913:34:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "956:32:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "970:9:16" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "981:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "966:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "966:22:16" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "960:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1036:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1045:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1048:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1038:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1038:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1038:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1015:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1019:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1011:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1011:13:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1026:7:16" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1007:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1007:27:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1000:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1000:35:16" - }, - "nodeType": "YulIf", - "src": "997:55:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1061:19:16", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1077:2:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1071:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "1071:9:16" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1065:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1103:22:16", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1105:16:16" - }, - "nodeType": "YulFunctionCall", - "src": "1105:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1105:18:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1095:2:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1099:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1092:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1092:10:16" - }, - "nodeType": "YulIf", - "src": "1089:36:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1134:17:16", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1148:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1144:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1144:7:16" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1138:2:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1160:23:16", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1180:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1174:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "1174:9:16" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1164:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1192:71:16", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1214:6:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1238:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1242:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1234:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1234:13:16" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1249:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1230:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1230:22:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1254:2:16", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1226:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1226:31:16" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1259:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1222:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1222:40:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1210:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1210:53:16" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1196:10:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1322:22:16", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1324:16:16" - }, - "nodeType": "YulFunctionCall", - "src": "1324:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1324:18:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1281:10:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1293:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1278:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1278:18:16" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1301:10:16" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1313:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1298:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1298:22:16" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1275:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1275:46:16" - }, - "nodeType": "YulIf", - "src": "1272:72:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1360:2:16", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1364:10:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1353:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1353:22:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1353:22:16" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1391:6:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1399:2:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1384:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1384:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1384:18:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1448:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1457:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1460:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1450:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1450:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1450:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1425:2:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1429:2:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1421:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1421:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1434:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1417:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1417:20:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1439:7:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1414:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1414:33:16" - }, - "nodeType": "YulIf", - "src": "1411:53:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1499:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1503:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1495:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1495:11:16" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1512:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1520:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1508:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1508:15:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1525:2:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1473:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "1473:55:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1473:55:16" - }, - { - "nodeType": "YulAssignment", - "src": "1537:16:16", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1547:6:16" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1537:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "656:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "667:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "679:6:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "687:6:16", - "type": "" - } - ], - "src": "591:968:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1613:173:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1643:111:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1664:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1671:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1676:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1667:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1667:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1657:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1657:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1657:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1708:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1711:4:16", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1701:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1701:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1701:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1736:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1739:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1729:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1729:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1729:15:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1629:1:16" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1632:1:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1626:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1626:8:16" - }, - "nodeType": "YulIf", - "src": "1623:131:16" - }, - { - "nodeType": "YulAssignment", - "src": "1763:17:16", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1775:1:16" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1778:1:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1771:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1771:9:16" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "1763:4:16" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "1595:1:16", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "1598:1:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "1604:4:16", - "type": "" - } - ], - "src": "1564:222:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1823:95:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1840:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1847:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1852:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1843:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1843:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1833:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1833:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1833:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1880:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1883:4:16", - "type": "", - "value": "0x01" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1873:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1873:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1873:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1904:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1907:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1897:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1897:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1897:15:16" - } - ] - }, - "name": "panic_error_0x01", - "nodeType": "YulFunctionDefinition", - "src": "1791:127:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2004:127:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2050:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2059:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2062:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2052:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2052:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2052:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2025:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2034:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2021:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2021:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2046:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2017:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2017:32:16" - }, - "nodeType": "YulIf", - "src": "2014:52:16" - }, - { - "nodeType": "YulAssignment", - "src": "2075:50:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2115:9:16" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "2085:29:16" - }, - "nodeType": "YulFunctionCall", - "src": "2085:40:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2075:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1970:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1981:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1993:6:16", - "type": "" - } - ], - "src": "1923:208:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2310:227:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2327:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2338:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2320:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2320:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2320:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2361:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2372:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2357:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2357:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2377:2:16", - "type": "", - "value": "37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2350:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2350:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2350:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2400:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2411:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2396:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2396:18:16" - }, - { - "hexValue": "455243313936373a206e657720626561636f6e206973206e6f74206120636f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2416:34:16", - "type": "", - "value": "ERC1967: new beacon is not a con" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2389:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2389:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2389:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2471:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2482:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2467:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2467:18:16" - }, - { - "hexValue": "7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2487:7:16", - "type": "", - "value": "tract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2460:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2460:35:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2460:35:16" - }, - { - "nodeType": "YulAssignment", - "src": "2504:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2516:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2527:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2512:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2512:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2504:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2287:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2301:4:16", - "type": "" - } - ], - "src": "2136:401:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2716:238:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2733:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2744:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2726:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2726:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2726:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2767:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2778:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2763:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2763:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2783:2:16", - "type": "", - "value": "48" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2756:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2756:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2756:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2806:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2817:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2802:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2802:18:16" - }, - { - "hexValue": "455243313936373a20626561636f6e20696d706c656d656e746174696f6e2069", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2822:34:16", - "type": "", - "value": "ERC1967: beacon implementation i" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2795:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2795:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2795:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2877:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2888:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2873:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2873:18:16" - }, - { - "hexValue": "73206e6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2893:18:16", - "type": "", - "value": "s not a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2866:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2866:46:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2866:46:16" - }, - { - "nodeType": "YulAssignment", - "src": "2921:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2933:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2944:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2929:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2929:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2921:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2693:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2707:4:16", - "type": "" - } - ], - "src": "2542:412:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3133:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3150:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3161:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3143:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3143:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3143:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3184:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3195:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3180:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3180:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3200:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3173:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3173:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3173:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3223:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3234:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3219:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3219:18:16" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3239:34:16", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3212:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3212:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3212:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3294:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3305:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3290:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3290:18:16" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3310:8:16", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3283:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3283:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3283:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "3328:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3340:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3351:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3336:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3336:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3328:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3110:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3124:4:16", - "type": "" - } - ], - "src": "2959:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3503:137:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3513:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3533:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3527:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "3527:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3517:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3575:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3583:4:16", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3571:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3571:17:16" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3590:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3595:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3549:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "3549:53:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3549:53:16" - }, - { - "nodeType": "YulAssignment", - "src": "3611:23:16", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3622:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3627:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3618:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3618:16:16" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3611:3:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3479:3:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3484:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3495:3:16", - "type": "" - } - ], - "src": "3366:274:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3766:262:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3783:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3794:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3776:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3776:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3776:21:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3806:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3826:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3820:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "3820:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3810:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3853:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3864:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3849:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3849:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3869:6:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3842:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3842:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3842:34:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3911:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3919:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3907:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3907:15:16" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3928:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3939:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3924:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3924:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3944:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3885:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "3885:66:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3885:66:16" - }, - { - "nodeType": "YulAssignment", - "src": "3960:62:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3976:9:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3995:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4003:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3991:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3991:15:16" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4012:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "4008:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4008:7:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3987:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3987:29:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3972:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3972:45:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4019:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3968:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3968:54:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3960:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3735:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3746:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3757:4:16", - "type": "" - } - ], - "src": "3645:383:16" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n let offset := mload(add(headStart, 32))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value1 := memPtr\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n diff := sub(x, y)\n }\n function panic_error_0x01()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x01)\n revert(0, 0x24)\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n }\n function abi_encode_tuple_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 37)\n mstore(add(headStart, 64), \"ERC1967: new beacon is not a con\")\n mstore(add(headStart, 96), \"tract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 48)\n mstore(add(headStart, 64), \"ERC1967: beacon implementation i\")\n mstore(add(headStart, 96), \"s not a contract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xA93 CODESIZE SUB DUP1 PUSH3 0xA93 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x4C6 JUMP JUMPDEST PUSH3 0x53 PUSH1 0x1 PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D51 PUSH3 0x594 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xA4C DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0x73 JUMPI PUSH3 0x73 PUSH3 0x5BA JUMP JUMPDEST PUSH3 0x81 DUP3 DUP3 PUSH1 0x0 PUSH3 0x89 JUMP JUMPDEST POP POP PUSH3 0x641 JUMP JUMPDEST PUSH3 0x94 DUP4 PUSH3 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0x1CF3B03A6CF19FA2BABA4DF148E9DCABEDEA7F8A5C07840E207E5C089BE95D3E SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH3 0xD6 JUMPI POP DUP1 JUMPDEST ISZERO PUSH3 0x159 JUMPI PUSH3 0x157 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x11F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x145 SWAP2 SWAP1 PUSH3 0x5D0 JUMP JUMPDEST DUP4 PUSH3 0x2FF PUSH1 0x20 SHL PUSH3 0x29 OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH3 0x174 DUP2 PUSH3 0x32E PUSH1 0x20 SHL PUSH3 0x55 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720626561636F6E206973206E6F74206120636F6E PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x1D1C9858DD PUSH1 0xDA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x24E DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x217 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x23D SWAP2 SWAP1 PUSH3 0x5D0 JUMP JUMPDEST PUSH3 0x32E PUSH1 0x20 SHL PUSH3 0x55 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x2B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A20626561636F6E20696D706C656D656E746174696F6E2069 PUSH1 0x44 DUP3 ADD MSTORE PUSH16 0x1CC81B9BDD08184818DBDB9D1C9858DD PUSH1 0x82 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x1CB JUMP JUMPDEST DUP1 PUSH3 0x2DE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xA4C DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x33D PUSH1 0x20 SHL PUSH3 0x71 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 PUSH3 0x327 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0xA6C PUSH1 0x27 SWAP2 CODECOPY PUSH3 0x340 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH3 0x3AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x1CB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH3 0x3C7 SWAP2 SWAP1 PUSH3 0x5EE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x404 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x409 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH3 0x41C DUP3 DUP3 DUP7 PUSH3 0x426 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH3 0x437 JUMPI POP DUP2 PUSH3 0x327 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH3 0x448 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x1CB SWAP2 SWAP1 PUSH3 0x60C JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x47C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x4B4 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x49A JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x157 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x4DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x4E5 DUP4 PUSH3 0x464 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x518 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x52D JUMPI PUSH3 0x52D PUSH3 0x481 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x558 JUMPI PUSH3 0x558 PUSH3 0x481 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x572 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x585 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x497 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH3 0x5B5 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x5E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x327 DUP3 PUSH3 0x464 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x602 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x497 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH3 0x62D DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH3 0x497 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3FB DUP1 PUSH3 0x651 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x74 JUMP JUMPDEST PUSH2 0x127 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x39F PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x14B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB4 PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x122 SWAP2 SWAP1 PUSH2 0x2CB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x146 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x1F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x21E SWAP2 SWAP1 PUSH2 0x331 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x259 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x25E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x26E DUP3 DUP3 DUP7 PUSH2 0x278 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x287 JUMPI POP DUP2 PUSH2 0x4E JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x297 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1ED SWAP2 SWAP1 PUSH2 0x34D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x31C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x304 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x32B JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x343 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x301 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x36C DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x301 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x70667358221220744BCC SMOD PUSH9 0x461F75B2BE5663808B 0xCE 0xB1 CALLDATACOPY 0xCF JUMPDEST GT MOD PUSH24 0x132A21A570E5DECAFC064736F6C634300080A0033A3F0AD PUSH21 0xE5423AEBFD80D3EF4346578335A9A72AEAEE59FF6C 0xB3 PC 0x2B CALLDATALOAD SGT RETURNDATASIZE POP COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C65640000 ", - "sourceMap": "564:1606:5:-:0;;;1046:205;;;;;;;;;;;;;;;;;;:::i;:::-;1142:46;1187:1;1150:33;1142:46;:::i;:::-;-1:-1:-1;;;;;;;;;;;1118:71:5;1111:79;;;;:::i;:::-;1200:44;1224:6;1232:4;1238:5;1200:23;:44::i;:::-;1046:205;;564:1606;;6147:343:3;6283:21;6294:9;6283:10;:21::i;:::-;6319:25;;-1:-1:-1;;;;;6319:25:3;;;;;;;;6372:1;6358:4;:11;:15;:28;;;;6377:9;6358:28;6354:130;;;6402:71;6439:9;-1:-1:-1;;;;;6431:33:3;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6468:4;6402:28;;;;;:71;;:::i;:::-;;6354:130;6147:343;;;:::o;5507:337::-;5572:29;5591:9;5572:18;;;;;:29;;:::i;:::-;5564:79;;;;-1:-1:-1;;;5564:79:3;;2338:2:16;5564:79:3;;;2320:21:16;2377:2;2357:18;;;2350:30;2416:34;2396:18;;;2389:62;-1:-1:-1;;;2467:18:16;;;2460:35;2512:19;;5564:79:3;;;;;;;;;5661:55;5688:9;-1:-1:-1;;;;;5680:33:3;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5661:18;;;;;:55;;:::i;:::-;5653:116;;;;-1:-1:-1;;;5653:116:3;;2744:2:16;5653:116:3;;;2726:21:16;2783:2;2763:18;;;2756:30;2822:34;2802:18;;;2795:62;-1:-1:-1;;;2873:18:16;;;2866:46;2929:19;;5653:116:3;2542:412:16;5653:116:3;5828:9;5779:40;-1:-1:-1;;;;;;;;;;;5806:12:3;;5779:26;;;;;:40;;:::i;:::-;:58;;-1:-1:-1;;;;;;5779:58:3;-1:-1:-1;;;;;5779:58:3;;;;;;;;;;-1:-1:-1;5507:337:3:o;6575:198:12:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:12:o;1180:320::-;-1:-1:-1;;;;;1470:19:12;;:23;;;1180:320::o;1599:147:14:-;1726:4;1599:147::o;6959:387:12:-;7100:12;-1:-1:-1;;;;;1470:19:12;;;7124:69;;;;-1:-1:-1;;;7124:69:12;;3161:2:16;7124:69:12;;;3143:21:16;3200:2;3180:18;;;3173:30;3239:34;3219:18;;;3212:62;-1:-1:-1;;;3290:18:16;;;3283:36;3336:19;;7124:69:12;2959:402:16;7124:69:12;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:12;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7204:67:12;;-1:-1:-1;7204:67:12;-1:-1:-1;7288:51:12;7204:67;;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:12:o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:12;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:12;;;;;;;;:::i;14:177:16:-;93:13;;-1:-1:-1;;;;;135:31:16;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:258;400:1;410:113;424:6;421:1;418:13;410:113;;;500:11;;;494:18;481:11;;;474:39;446:2;439:10;410:113;;;541:6;538:1;535:13;532:48;;;-1:-1:-1;;576:1:16;558:16;;551:27;328:258::o;591:968::-;679:6;687;740:2;728:9;719:7;715:23;711:32;708:52;;;756:1;753;746:12;708:52;779:40;809:9;779:40;:::i;:::-;863:2;848:18;;842:25;769:50;;-1:-1:-1;;;;;;916:14:16;;;913:34;;;943:1;940;933:12;913:34;981:6;970:9;966:22;956:32;;1026:7;1019:4;1015:2;1011:13;1007:27;997:55;;1048:1;1045;1038:12;997:55;1077:2;1071:9;1099:2;1095;1092:10;1089:36;;;1105:18;;:::i;:::-;1180:2;1174:9;1148:2;1234:13;;-1:-1:-1;;1230:22:16;;;1254:2;1226:31;1222:40;1210:53;;;1278:18;;;1298:22;;;1275:46;1272:72;;;1324:18;;:::i;:::-;1364:10;1360:2;1353:22;1399:2;1391:6;1384:18;1439:7;1434:2;1429;1425;1421:11;1417:20;1414:33;1411:53;;;1460:1;1457;1450:12;1411:53;1473:55;1525:2;1520;1512:6;1508:15;1503:2;1499;1495:11;1473:55;:::i;:::-;1547:6;1537:16;;;;;;;591:968;;;;;:::o;1564:222::-;1604:4;1632:1;1629;1626:8;1623:131;;;1676:10;1671:3;1667:20;1664:1;1657:31;1711:4;1708:1;1701:15;1739:4;1736:1;1729:15;1623:131;-1:-1:-1;1771:9:16;;1564:222::o;1791:127::-;1852:10;1847:3;1843:20;1840:1;1833:31;1883:4;1880:1;1873:15;1907:4;1904:1;1897:15;1923:208;1993:6;2046:2;2034:9;2025:7;2021:23;2017:32;2014:52;;;2062:1;2059;2052:12;2014:52;2085:40;2115:9;2085:40;:::i;3366:274::-;3495:3;3533:6;3527:13;3549:53;3595:6;3590:3;3583:4;3575:6;3571:17;3549:53;:::i;:::-;3618:16;;;;;3366:274;-1:-1:-1;;3366:274:16:o;3645:383::-;3794:2;3783:9;3776:21;3757:4;3826:6;3820:13;3869:6;3864:2;3853:9;3849:18;3842:34;3885:66;3944:6;3939:2;3928:9;3924:18;3919:2;3911:6;3907:15;3885:66;:::i;:::-;4012:2;3991:15;-1:-1:-1;;3987:29:16;3972:45;;;;4019:2;3968:54;;3645:383;-1:-1:-1;;3645:383:16:o;:::-;564:1606:5;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_524": { - "entryPoint": null, - "id": 524, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_532": { - "entryPoint": null, - "id": 532, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_537": { - "entryPoint": null, - "id": 537, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_delegate_497": { - "entryPoint": 295, - "id": 497, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_fallback_516": { - "entryPoint": 23, - "id": 516, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getBeacon_411": { - "entryPoint": null, - "id": 411, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_implementation_604": { - "entryPoint": 116, - "id": 604, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@functionDelegateCall_1437": { - "entryPoint": 41, - "id": 1437, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_1472": { - "entryPoint": 331, - "id": 1472, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_1552": { - "entryPoint": 113, - "id": 1552, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_1227": { - "entryPoint": 85, - "id": 1227, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_1503": { - "entryPoint": 632, - "id": 1503, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 715, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 817, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 845, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 769, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1725:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "95:232:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "141:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "153:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "143:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "143:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "143:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "116:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "125:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "112:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "112:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "137:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "108:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "108:32:16" - }, - "nodeType": "YulIf", - "src": "105:52:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "166:29:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "185:9:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "179:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "179:16:16" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "170:5:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "281:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "290:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "293:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "283:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "283:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "283:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "217:5:16" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "228:5:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "235:42:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "224:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "224:54:16" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "214:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "214:65:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "207:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "207:73:16" - }, - "nodeType": "YulIf", - "src": "204:93:16" - }, - { - "nodeType": "YulAssignment", - "src": "306:15:16", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "316:5:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "306:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "61:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "72:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "84:6:16", - "type": "" - } - ], - "src": "14:313:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "506:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "523:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "534:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "516:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "516:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "516:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "557:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "568:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "553:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "553:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "573:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "546:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "546:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "546:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "596:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "607:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "592:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "592:18:16" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "612:34:16", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "585:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "585:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "585:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "667:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "678:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "663:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "663:18:16" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "683:8:16", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "656:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "656:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "656:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "701:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "713:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "724:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "709:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "709:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "701:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "483:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "497:4:16", - "type": "" - } - ], - "src": "332:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "792:205:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "802:10:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "811:1:16", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "806:1:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "871:63:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "896:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "901:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "892:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "892:11:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "915:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "920:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "911:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "911:11:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "905:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "905:18:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "885:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "885:39:16" - }, - "nodeType": "YulExpressionStatement", - "src": "885:39:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "832:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "835:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "829:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "829:13:16" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "843:19:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "845:15:16", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "854:1:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "857:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "850:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "850:10:16" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "845:1:16" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "825:3:16", - "statements": [] - }, - "src": "821:113:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "960:31:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "973:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "978:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "969:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "969:16:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "987:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "962:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "962:27:16" - }, - "nodeType": "YulExpressionStatement", - "src": "962:27:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "949:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "952:6:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "946:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "946:13:16" - }, - "nodeType": "YulIf", - "src": "943:48:16" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "770:3:16", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "775:3:16", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "780:6:16", - "type": "" - } - ], - "src": "739:258:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1139:137:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1149:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1169:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1163:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "1163:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1153:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1211:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1219:4:16", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1207:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1207:17:16" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1226:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1231:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1185:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "1185:53:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1185:53:16" - }, - { - "nodeType": "YulAssignment", - "src": "1247:23:16", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1258:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1263:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1254:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1254:16:16" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1247:3:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1115:3:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1120:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1131:3:16", - "type": "" - } - ], - "src": "1002:274:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1402:321:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1419:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1430:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1412:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1412:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1412:21:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1442:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1462:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1456:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "1456:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1446:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1489:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1500:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1485:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1485:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1505:6:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1478:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1478:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1478:34:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1547:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1555:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1543:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1543:15:16" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1564:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1575:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1560:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1560:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1580:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1521:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "1521:66:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1521:66:16" - }, - { - "nodeType": "YulAssignment", - "src": "1596:121:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1612:9:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1631:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1639:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1627:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1627:15:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1644:66:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1623:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1623:88:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1608:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1608:104:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1714:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1604:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1604:113:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1596:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1371:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1382:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1393:4:16", - "type": "" - } - ], - "src": "1281:442:16" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x74 JUMP JUMPDEST PUSH2 0x127 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x39F PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x14B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB4 PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x122 SWAP2 SWAP1 PUSH2 0x2CB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x146 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x1F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x21E SWAP2 SWAP1 PUSH2 0x331 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x259 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x25E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x26E DUP3 DUP3 DUP7 PUSH2 0x278 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x287 JUMPI POP DUP2 PUSH2 0x4E JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x297 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1ED SWAP2 SWAP1 PUSH2 0x34D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x4E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x31C JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x304 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x32B JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x343 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x301 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x36C DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x301 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x70667358221220744BCC SMOD PUSH9 0x461F75B2BE5663808B 0xCE 0xB1 CALLDATACOPY 0xCF JUMPDEST GT MOD PUSH24 0x132A21A570E5DECAFC064736F6C634300080A0033000000 ", - "sourceMap": "564:1606:5:-:0;;;;;;2903:11:4;:9;:11::i;:::-;564:1606:5;;2680:11:4;2327:110;2402:28;2412:17;:15;:17::i;:::-;2402:9;:28::i;:::-;2327:110::o;6575:198:12:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:12:o;1180:320::-;1470:19;;;:23;;;1180:320::o;1599:147:14:-;1726:4;1599:147::o;1519:138:5:-;1586:7;1620:12;5056:66:3;5372:46;;;;5301:124;1620:12:5;1612:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1605:45;;1519:138;:::o;953:895:4:-;1291:14;1288:1;1285;1272:34;1505:1;1502;1486:14;1483:1;1467:14;1460:5;1447:60;1581:16;1578:1;1575;1560:38;1619:6;1686:66;;;;1801:16;1798:1;1791:27;1686:66;1721:16;1718:1;1711:27;6959:387:12;7100:12;1470:19;;;;7124:69;;;;;;;534:2:16;7124:69:12;;;516:21:16;573:2;553:18;;;546:30;612:34;592:18;;;585:62;683:8;663:18;;;656:36;709:19;;7124:69:12;;;;;;;;;7205:12;7219:23;7246:6;:19;;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7204:67;;;;7288:51;7305:7;7314:10;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:12:o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:12;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;;;;;;;;;;:::i;14:313:16:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;185:9;179:16;235:42;228:5;224:54;217:5;214:65;204:93;;293:1;290;283:12;739:258;811:1;821:113;835:6;832:1;829:13;821:113;;;911:11;;;905:18;892:11;;;885:39;857:2;850:10;821:113;;;952:6;949:1;946:13;943:48;;;987:1;978:6;973:3;969:16;962:27;943:48;;739:258;;;:::o;1002:274::-;1131:3;1169:6;1163:13;1185:53;1231:6;1226:3;1219:4;1211:6;1207:17;1185:53;:::i;:::-;1254:16;;;;;1002:274;-1:-1:-1;;1002:274:16:o;1281:442::-;1430:2;1419:9;1412:21;1393:4;1462:6;1456:13;1505:6;1500:2;1489:9;1485:18;1478:34;1521:66;1580:6;1575:2;1564:9;1560:18;1555:2;1547:6;1543:15;1521:66;:::i;:::-;1639:2;1627:15;1644:66;1623:88;1608:104;;;;1714:2;1604:113;;1281:442;-1:-1:-1;;1281:442:16:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "203800", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite" - }, - "internal": { - "_beacon()": "infinite", - "_implementation()": "infinite", - "_setBeacon(address,bytes memory)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}. The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't conflict with the storage layout of the implementation behind the proxy. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the proxy with `beacon`. If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor. Requirements: - `beacon` must be a contract with the interface {IBeacon}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\":\"BeaconProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\",\"keccak256\":\"0x54878f0d2f40b5e13f84977bcd3c71d4c38581414e7efb4909cb16dd3ace392f\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/Clones.json b/extendedArtifacts/Clones.json deleted file mode 100644 index ca0bbf0..0000000 --- a/extendedArtifacts/Clones.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "contractName": "Clones", - "sourceName": "solc_0.8/openzeppelin/proxy/Clones.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207d7b5d469e9c289eeba6f37e1bcc6deb7f5b8e00d2bff8902b8a91d1669f63c464736f6c634300080a0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207d7b5d469e9c289eeba6f37e1bcc6deb7f5b8e00d2bff8902b8a91d1669f63c464736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for deploying minimal proxy contracts, also known as \"clones\". > To simply and cheaply clone contract functionality in an immutable way, this standard specifies > a minimal bytecode implementation that delegates all calls to a known, fixed address. The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the deterministic method. _Available since v3.4._", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x7B5D469E9C289EEBA6F37E1BCC6DEB7F5B8E00D2BFF8902B8A91D1669F63 0xC4 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "740:2817:0:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;740:2817:0;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x7B5D469E9C289EEBA6F37E1BCC6DEB7F5B8E00D2BFF8902B8A91D1669F63 0xC4 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "740:2817:0:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "clone(address)": "infinite", - "cloneDeterministic(address,bytes32)": "infinite", - "predictDeterministicAddress(address,bytes32)": "infinite", - "predictDeterministicAddress(address,bytes32,address)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for deploying minimal proxy contracts, also known as \\\"clones\\\". > To simply and cheaply clone contract functionality in an immutable way, this standard specifies > a minimal bytecode implementation that delegates all calls to a known, fixed address. The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the deterministic method. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/Clones.sol\":\"Clones\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/proxy/Clones.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\",\"keccak256\":\"0x1cc0efb01cbf008b768fd7b334786a6e358809198bb7e67f1c530af4957c6a21\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "e2d945ac773b9f390b942223c790e77b" -} \ No newline at end of file diff --git a/extendedArtifacts/Context.json b/extendedArtifacts/Context.json deleted file mode 100644 index 833de8f..0000000 --- a/extendedArtifacts/Context.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "contractName": "Context", - "sourceName": "solc_0.8/openzeppelin/utils/Context.sol", - "abi": [], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/Context.sol\":\"Context\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/Diamond.json b/extendedArtifacts/Diamond.json deleted file mode 100644 index 812acba..0000000 --- a/extendedArtifacts/Diamond.json +++ /dev/null @@ -1,17486 +0,0 @@ -{ - "contractName": "Diamond", - "sourceName": "solc_0.8/diamond/Diamond.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct Diamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60806040526040516200321e3803806200321e833981016040819052620000269162001340565b6001600160a01b038316156200004c576200004c83620000f760201b620001071760201c565b62000074826000604051806020016040528060008152506200017b60201b620001c11760201c565b60005b8151811015620000ed57620000d88282815181106200009a576200009a62001514565b602002602001015160000151838381518110620000bb57620000bb62001514565b602002602001015160200151620003d960201b620004051760201c565b80620000e48162001540565b91505062000077565b505050506200173d565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080546001600160a01b031981166001600160a01b0384811691821790935560405160008051602062003172833981519152939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156200038a5760008482815181106200019f576200019f62001514565b602002602001015160200151905060006002811115620001c357620001c36200155e565b816002811115620001d857620001d86200155e565b1415620002375762000231858381518110620001f857620001f862001514565b60200260200101516000015186848151811062000219576200021962001514565b602002602001015160400151620005fe60201b60201c565b62000374565b60018160028111156200024e576200024e6200155e565b1415620002a757620002318583815181106200026e576200026e62001514565b6020026020010151600001518684815181106200028f576200028f62001514565b6020026020010151604001516200088860201b60201c565b6002816002811115620002be57620002be6200155e565b1415620003175762000231858381518110620002de57620002de62001514565b602002602001015160000151868481518110620002ff57620002ff62001514565b60200260200101516040015162000b1e60201b60201c565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b60648201526084015b60405180910390fd5b5080620003818162001540565b9150506200017e565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051620003c093929190620015a2565b60405180910390a1620003d48282620003d9565b505050565b6001600160a01b03821662000463578051156200045f5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016200036b565b5050565b6000815111620004dc5760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016200036b565b6001600160a01b038216301462000512576200051282604051806060016040528060288152602001620031926028913962000c7e565b600080836001600160a01b0316836040516200052f9190620016a9565b600060405180830381855af49150503d80600081146200056c576040519150601f19603f3d011682016040523d82523d6000602084013e62000571565b606091505b509150915081620005f857805115620005a0578060405162461bcd60e51b81526004016200036b9190620016c7565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b60648201526084016200036b565b50505050565b6000815111620006545760405162461bcd60e51b815260206004820152602b6024820152600080516020620031fe83398151915260448201526a1858d95d081d1bc818dd5d60aa1b60648201526084016200036b565b600080516020620031728339815191526001600160a01b038316620006c05760405162461bcd60e51b815260206004820152602c6024820152600080516020620031ba83398151915260448201526b65206164647265737328302960a01b60648201526084016200036b565b6001600160a01b03831660009081526001820160205260409020546001600160601b038116620006f657620006f6828562000ca2565b60005b8351811015620008815760008482815181106200071a576200071a62001514565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03168015620007c25760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016200036b565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b031916179055836200086681620016e3565b94505050508080620008789062001540565b915050620006f9565b5050505050565b6000815111620008de5760405162461bcd60e51b815260206004820152602b6024820152600080516020620031fe83398151915260448201526a1858d95d081d1bc818dd5d60aa1b60648201526084016200036b565b600080516020620031728339815191526001600160a01b0383166200094a5760405162461bcd60e51b815260206004820152602c6024820152600080516020620031ba83398151915260448201526b65206164647265737328302960a01b60648201526084016200036b565b6001600160a01b03831660009081526001820160205260409020546001600160601b038116620009805762000980828562000ca2565b60005b835181101562000881576000848281518110620009a457620009a462001514565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690871681141562000a525760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016200036b565b62000a5f85828462000d0f565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b0319161790558362000b0381620016e3565b9450505050808062000b159062001540565b91505062000983565b600081511162000b745760405162461bcd60e51b815260206004820152602b6024820152600080516020620031fe83398151915260448201526a1858d95d081d1bc818dd5d60aa1b60648201526084016200036b565b600080516020620031728339815191526001600160a01b0383161562000c035760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016200036b565b60005b8251811015620005f857600083828151811062000c275762000c2762001514565b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b031662000c6684828462000d0f565b5050808062000c759062001540565b91505062000c06565b813b8181620005f85760405162461bcd60e51b81526004016200036b9190620016c7565b62000cc781604051806060016040528060248152602001620031da6024913962000c7e565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160a01b03821662000d8d5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016200036b565b6001600160a01b03821630141562000dff5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b60648201526084016200036b565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b0316929162000e50916200170d565b905080821462000f49576001600160a01b0384166000908152600186016020526040812080548390811062000e895762000e8962001514565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b92508291908590811062000edd5762000edd62001514565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b0384166000908152600186016020526040902080548062000f755762000f7562001727565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319851682528690526040812055806200088157600285015460009062000fd7906001906200170d565b6001600160a01b03861660009081526001808901602052604090912001549091508082146200108d5760008760020183815481106200101a576200101a62001514565b6000918252602090912001546002890180546001600160a01b0390921692508291849081106200104e576200104e62001514565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b86600201805480620010a357620010a362001727565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505050505050565b80516001600160a01b03811681146200110457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171562001144576200114462001109565b60405290565b604051606081016001600160401b038111828210171562001144576200114462001109565b604051601f8201601f191681016001600160401b03811182821017156200119a576200119a62001109565b604052919050565b60006001600160401b03821115620011be57620011be62001109565b5060051b60200190565b60005b83811015620011e5578181015183820152602001620011cb565b83811115620005f85750506000910152565b6000601f83818401126200120a57600080fd5b82516020620012236200121d83620011a2565b6200116f565b82815260059290921b850181019181810190878411156200124357600080fd5b8287015b84811015620013345780516001600160401b0380821115620012695760008081fd5b908901906040601f19838d038101821315620012855760008081fd5b6200128f6200111f565b6200129c898601620010ec565b81528285015184811115620012b15760008081fd5b8086019550508d603f860112620012c85760008081fd5b8885015184811115620012df57620012df62001109565b620012f08a848e840116016200116f565b94508085528e848288010111156200130a57600092508283fd5b6200131b818b8701868901620011c8565b5080890193909352505084525091830191830162001247565b50979650505050505050565b6000806000606084860312156200135657600080fd5b6200136184620010ec565b60208501519093506001600160401b03808211156200137f57600080fd5b818601915086601f8301126200139457600080fd5b8151620013a56200121d82620011a2565b8082825260208201915060208360051b860101925089831115620013c857600080fd5b602085015b83811015620014e057805185811115620013e657600080fd5b86016060818d03601f19011215620013fd57600080fd5b620014076200114a565b6200141560208301620010ec565b81526040820151600381106200142a57600080fd5b60208201526060820151878111156200144257600080fd5b8083019250508c603f8301126200145857600080fd5b60208201516200146c6200121d82620011a2565b81815260059190911b83016040019060208101908f8311156200148e57600080fd5b6040850194505b82851015620014c95784516001600160e01b031981168114620014b757600080fd5b82526020948501949091019062001495565b6040840152505084525060209283019201620013cd565b5060408901519096509350505080821115620014fb57600080fd5b506200150a86828701620011f7565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156200155757620015576200152a565b5060010190565b634e487b7160e01b600052602160045260246000fd5b600081518084526200158e816020860160208601620011c8565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156200167757898403607f19018652815180516001600160a01b031685528381015189860190600381106200161357634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015620016615783516001600160e01b031916825292860192600192909201919086019062001635565b50978501979550505090820190600101620015cb565b50506001600160a01b038a169088015286810360408801526200169b818962001574565b9a9950505050505050505050565b60008251620016bd818460208701620011c8565b9190910192915050565b602081526000620016dc602083018462001574565b9392505050565b60006001600160601b03828116808214156200170357620017036200152a565b6001019392505050565b6000828210156200172257620017226200152a565b500390565b634e487b7160e01b600052603160045260246000fd5b611a25806200174d6000396000f3fe60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f7420657869737460448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610102573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156103ba5760008482815181106101e1576101e1611657565b60200260200101516020015190506000600281111561020257610202611686565b81600281111561021457610214611686565b14156102635761025e85838151811061022f5761022f611657565b60200260200101516000015186848151811061024d5761024d611657565b6020026020010151604001516106be565b6103a7565b600181600281111561027757610277611686565b14156102c15761025e85838151811061029257610292611657565b6020026020010151600001518684815181106102b0576102b0611657565b602002602001015160400151610a71565b60028160028111156102d5576102d5611686565b141561031f5761025e8583815181106102f0576102f0611657565b60200260200101516000015186848151811061030e5761030e611657565b602002602001015160400151610e2e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e0000000000000000000000000000000000000000000000000060648201526084016100da565b50806103b2816116e4565b9150506101c4565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516103ee93929190611793565b60405180910390a16104008282610405565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166104b3578051156104af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016100da565b5050565b6000815111610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff8216301461058357610583826040518060600160405280602881526020016119a46028913961101b565b6000808373ffffffffffffffffffffffffffffffffffffffff16836040516105ab91906118fb565b600060405180830381855af49150503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b5091509150816106b85780511561063057806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100da9190611917565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560448201527f766572746564000000000000000000000000000000000000000000000000000060648201526084016100da565b50505050565b600081511161074f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610858576108588285611056565b60005b8351811015610a6a57600084828151811061087857610878611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16801561095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016100da565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610a5281611931565b94505050508080610a62906116e4565b91505061085b565b5050505050565b6000815111610b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610c0b57610c0b8285611056565b60005b8351811015610a6a576000848281518110610c2b57610c2b611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016100da565b610d218582846110e5565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610e1681611931565b94505050508080610e26906116e4565b915050610c0e565b6000815111610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016100da565b60005b82518110156106b8576000838281518110610fa457610fa4611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff166110068482846110e5565b50508080611013906116e4565b915050610f87565b813b81816106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100da9190611917565b611078816040518060600160405280602481526020016119cc6024913961101b565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff821630141561122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e00000000000000000000000000000000000060648201526084016100da565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff1692916112b89161195d565b90508082146113ff5773ffffffffffffffffffffffffffffffffffffffff8416600090815260018601602052604081208054839081106112fa576112fa611657565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b92508291908590811061135857611358611657565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff84166000908152600186016020526040902080548061143557611435611974565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff0000000000000000000000000000000000000000000000000000000085168252869052604081205580610a6a5760028501546000906114ca9060019061195d565b73ffffffffffffffffffffffffffffffffffffffff861660009081526001808901602052604090912001549091508082146115b857600087600201838154811061151657611516611657565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff909216925082918490811061155457611554611657565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b866002018054806115cb576115cb611974565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611716576117166116b5565b5060010190565b60005b83811015611738578181015183820152602001611720565b838111156106b85750506000910152565b6000815180845261176181602086016020860161171d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156118be577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611845577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156118a95783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611867565b509785019795505050908201906001016117bc565b505073ffffffffffffffffffffffffffffffffffffffff8a169088015286810360408801526118ed8189611749565b9a9950505050505050505050565b6000825161190d81846020870161171d565b9190910192915050565b60208152600061192a6020830184611749565b9392505050565b60006bffffffffffffffffffffffff80831681811415611953576119536116b5565b6001019392505050565b60008282101561196f5761196f6116b5565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212202b18a533b03703e1326000cf2f36b1c6ec631cff163a752d939e5ee79ad2cde364736f6c634300080a0033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204164642066616365742063616e277420624c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f64654c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066", - "deployedBytecode": "0x60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f7420657869737460448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610102573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156103ba5760008482815181106101e1576101e1611657565b60200260200101516020015190506000600281111561020257610202611686565b81600281111561021457610214611686565b14156102635761025e85838151811061022f5761022f611657565b60200260200101516000015186848151811061024d5761024d611657565b6020026020010151604001516106be565b6103a7565b600181600281111561027757610277611686565b14156102c15761025e85838151811061029257610292611657565b6020026020010151600001518684815181106102b0576102b0611657565b602002602001015160400151610a71565b60028160028111156102d5576102d5611686565b141561031f5761025e8583815181106102f0576102f0611657565b60200260200101516000015186848151811061030e5761030e611657565b602002602001015160400151610e2e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e0000000000000000000000000000000000000000000000000060648201526084016100da565b50806103b2816116e4565b9150506101c4565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516103ee93929190611793565b60405180910390a16104008282610405565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166104b3578051156104af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016100da565b5050565b6000815111610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff8216301461058357610583826040518060600160405280602881526020016119a46028913961101b565b6000808373ffffffffffffffffffffffffffffffffffffffff16836040516105ab91906118fb565b600060405180830381855af49150503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b5091509150816106b85780511561063057806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100da9190611917565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560448201527f766572746564000000000000000000000000000000000000000000000000000060648201526084016100da565b50505050565b600081511161074f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610858576108588285611056565b60005b8351811015610a6a57600084828151811061087857610878611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16801561095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016100da565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610a5281611931565b94505050508080610a62906116e4565b91505061085b565b5050505050565b6000815111610b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610c0b57610c0b8285611056565b60005b8351811015610a6a576000848281518110610c2b57610c2b611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016100da565b610d218582846110e5565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610e1681611931565b94505050508080610e26906116e4565b915050610c0e565b6000815111610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016100da565b60005b82518110156106b8576000838281518110610fa457610fa4611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff166110068482846110e5565b50508080611013906116e4565b915050610f87565b813b81816106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100da9190611917565b611078816040518060600160405280602481526020016119cc6024913961101b565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff821630141561122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e00000000000000000000000000000000000060648201526084016100da565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff1692916112b89161195d565b90508082146113ff5773ffffffffffffffffffffffffffffffffffffffff8416600090815260018601602052604081208054839081106112fa576112fa611657565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b92508291908590811061135857611358611657565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff84166000908152600186016020526040902080548061143557611435611974565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff0000000000000000000000000000000000000000000000000000000085168252869052604081205580610a6a5760028501546000906114ca9060019061195d565b73ffffffffffffffffffffffffffffffffffffffff861660009081526001808901602052604090912001549091508082146115b857600087600201838154811061151657611516611657565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff909216925082918490811061155457611554611657565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b866002018054806115cb576115cb611974565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611716576117166116b5565b5060010190565b60005b83811015611738578181015183820152602001611720565b838111156106b85750506000910152565b6000815180845261176181602086016020860161171d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156118be577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611845577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156118a95783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611867565b509785019795505050908201906001016117bc565b505073ffffffffffffffffffffffffffffffffffffffff8a169088015286810360408801526118ed8189611749565b9a9950505050505050505050565b6000825161190d81846020870161171d565b9190910192915050565b60208152600061192a6020830184611749565b9392505050565b60006bffffffffffffffffffffffff80831681811415611953576119536116b5565b6001019392505050565b60008282101561196f5761196f6116b5565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212202b18a533b03703e1326000cf2f36b1c6ec631cff163a752d939e5ee79ad2cde364736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "constructor": { - "params": { - "_contractOwner": "the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.", - "_diamondCut": "the list of facet to add", - "_initializations": "the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization." - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_76": { - "entryPoint": null, - "id": 76, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@addFacet_1286": { - "entryPoint": 3234, - "id": 1286, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@addFunction_1327": { - "entryPoint": null, - "id": 1327, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@addFunctions_1084": { - "entryPoint": 1534, - "id": 1084, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@diamondCut_983": { - "entryPoint": 379, - "id": 983, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@enforceHasContractCode_1590": { - "entryPoint": 3198, - "id": 1590, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@initializeDiamondCut_1571": { - "entryPoint": 985, - "id": 1571, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@removeFunction_1494": { - "entryPoint": 3343, - "id": 1494, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@removeFunctions_1253": { - "entryPoint": 2846, - "id": 1253, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@replaceFunctions_1188": { - "entryPoint": 2184, - "id": 1188, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@setContractOwner_843": { - "entryPoint": 247, - "id": 843, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 4332, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_array_struct_Initialization_dyn_fromMemory": { - "entryPoint": 4599, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptrt_array$_t_struct$_Initialization_$10_memory_ptr_$dyn_memory_ptr_fromMemory": { - "entryPoint": 4928, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_address": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_bytes": { - "entryPoint": 5492, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 5801, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 5538, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 5831, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 4463, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory_3424": { - "entryPoint": 4383, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "allocate_memory_3425": { - "entryPoint": 4426, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "array_allocation_size_array_struct_FacetCut_dyn": { - "entryPoint": 4514, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 5901, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 4552, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "increment_t_uint256": { - "entryPoint": 5440, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "increment_t_uint96": { - "entryPoint": 5859, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 5418, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x21": { - "entryPoint": 5470, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x31": { - "entryPoint": 5927, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 5396, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 4361, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:14910:12", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:12", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:117:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "84:22:12", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "99:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "93:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "93:13:12" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "84:5:12" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "169:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "178:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "181:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "171:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "171:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "171:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "128:5:12" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "139:5:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "154:3:12", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "150:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "150:11:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "163:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "146:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "146:19:12" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "135:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "135:31:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "125:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "125:42:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "118:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "118:50:12" - }, - "nodeType": "YulIf", - "src": "115:70:12" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:12", - "type": "" - } - ], - "src": "14:177:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "228:95:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "245:1:12", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:3:12", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "257:10:12", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "248:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "248:20:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "238:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "238:31:12" - }, - "nodeType": "YulExpressionStatement", - "src": "238:31:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "285:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "288:4:12", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "278:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "278:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "278:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "302:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "302:15:12" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "196:127:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "374:211:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "384:21:12", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "400:4:12", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "394:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "394:11:12" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "384:6:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "414:35:12", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "436:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "444:4:12", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "432:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "432:17:12" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "418:10:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "524:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "526:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "526:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "526:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "467:10:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "487:2:12", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "491:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "483:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "483:10:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "495:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "479:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "479:18:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "464:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "464:34:12" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "503:10:12" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "515:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "500:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "500:22:12" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "461:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "461:62:12" - }, - "nodeType": "YulIf", - "src": "458:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "562:4:12", - "type": "", - "value": "0x40" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "568:10:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "555:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "555:24:12" - }, - "nodeType": "YulExpressionStatement", - "src": "555:24:12" - } - ] - }, - "name": "allocate_memory_3424", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "363:6:12", - "type": "" - } - ], - "src": "328:257:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "636:205:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "646:19:12", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "662:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "656:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "656:9:12" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "646:6:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "674:33:12", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "696:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "704:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "692:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "692:15:12" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "678:10:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "782:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "784:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "784:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "784:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "725:10:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "745:2:12", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "749:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "741:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "741:10:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "753:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "737:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "737:18:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "722:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "722:34:12" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "761:10:12" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "773:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "758:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "758:22:12" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "719:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "719:62:12" - }, - "nodeType": "YulIf", - "src": "716:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "820:2:12", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "824:10:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "813:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "813:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "813:22:12" - } - ] - }, - "name": "allocate_memory_3425", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "625:6:12", - "type": "" - } - ], - "src": "590:251:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "891:230:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "901:19:12", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "917:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "911:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "911:9:12" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "901:6:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "929:58:12", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "951:6:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "967:4:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "973:2:12", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "963:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "963:13:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "982:2:12", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "978:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "978:7:12" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "959:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "959:27:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "947:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "947:40:12" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "933:10:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1062:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1064:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "1064:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1064:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1005:10:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1025:2:12", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1029:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1021:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1021:10:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1033:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1017:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1017:18:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1002:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1002:34:12" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1041:10:12" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1053:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1038:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1038:22:12" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "999:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "999:62:12" - }, - "nodeType": "YulIf", - "src": "996:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1100:2:12", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1104:10:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1093:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1093:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1093:22:12" - } - ] - }, - "name": "allocate_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "871:4:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "880:6:12", - "type": "" - } - ], - "src": "846:275:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1203:114:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1247:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1249:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "1249:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1249:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1219:6:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1235:2:12", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1239:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1231:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1231:10:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1243:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1227:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1227:18:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1216:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1216:30:12" - }, - "nodeType": "YulIf", - "src": "1213:56:12" - }, - { - "nodeType": "YulAssignment", - "src": "1278:33:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1294:1:12", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1297:6:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1290:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1290:14:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1306:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1286:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1286:25:12" - }, - "variableNames": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "1278:4:12" - } - ] - } - ] - }, - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1183:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "1194:4:12", - "type": "" - } - ], - "src": "1126:191:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1375:205:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1385:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1394:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1389:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1454:63:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1479:3:12" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1484:1:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1475:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1475:11:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "1498:3:12" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1503:1:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1494:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1494:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1488:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "1488:18:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1468:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1468:39:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1468:39:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1415:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1418:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1412:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1412:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1426:19:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1428:15:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1437:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1440:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1433:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1433:10:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1428:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1408:3:12", - "statements": [] - }, - "src": "1404:113:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1543:31:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1556:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1561:6:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1552:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1552:16:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1570:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1545:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1545:27:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1545:27:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1532:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1535:6:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1529:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1529:13:12" - }, - "nodeType": "YulIf", - "src": "1526:48:12" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "1353:3:12", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "1358:3:12", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1363:6:12", - "type": "" - } - ], - "src": "1322:258:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1674:1967:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1684:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1694:4:12", - "type": "", - "value": "0x1f" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1688:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1744:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1753:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1756:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1746:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1746:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1746:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1725:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1733:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1721:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1721:15:12" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1738:3:12" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1717:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1717:25:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1710:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1710:33:12" - }, - "nodeType": "YulIf", - "src": "1707:53:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1769:23:12", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1785:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1779:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "1779:13:12" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1773:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1801:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1811:4:12", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1805:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1824:79:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1899:2:12" - } - ], - "functionName": { - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulIdentifier", - "src": "1851:47:12" - }, - "nodeType": "YulFunctionCall", - "src": "1851:51:12" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "1835:15:12" - }, - "nodeType": "YulFunctionCall", - "src": "1835:68:12" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "1828:3:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1912:16:12", - "value": { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1925:3:12" - }, - "variables": [ - { - "name": "dst_1", - "nodeType": "YulTypedName", - "src": "1916:5:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1944:3:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1949:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1937:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1937:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1937:15:12" - }, - { - "nodeType": "YulAssignment", - "src": "1961:19:12", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1972:3:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1977:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1968:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1968:12:12" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1961:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1989:46:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2011:6:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2023:1:12", - "type": "", - "value": "5" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2026:2:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2019:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2019:10:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2007:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2007:23:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2032:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2003:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2003:32:12" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "1993:6:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2063:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2072:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2075:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2065:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2065:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2065:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "2050:6:12" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2058:3:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2047:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "2047:15:12" - }, - "nodeType": "YulIf", - "src": "2044:35:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2088:26:12", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2103:6:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2111:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2099:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2099:15:12" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "2092:3:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2179:1433:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2193:29:12", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2218:3:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2212:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "2212:10:12" - }, - "variables": [ - { - "name": "innerOffset", - "nodeType": "YulTypedName", - "src": "2197:11:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2235:28:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2253:2:12", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2257:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2249:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2249:10:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2261:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2245:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2245:18:12" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "2239:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2311:74:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2329:11:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2339:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "2333:2:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "2364:2:12" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "2368:2:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2357:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2357:14:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2357:14:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "2282:11:12" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2295:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2279:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "2279:19:12" - }, - "nodeType": "YulIf", - "src": "2276:109:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2398:34:12", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2412:6:12" - }, - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "2420:11:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2408:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2408:24:12" - }, - "variables": [ - { - "name": "_6", - "nodeType": "YulTypedName", - "src": "2402:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2445:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2455:4:12", - "type": "", - "value": "0x40" - }, - "variables": [ - { - "name": "_7", - "nodeType": "YulTypedName", - "src": "2449:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2472:17:12", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2486:2:12", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "2482:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2482:7:12" - }, - "variables": [ - { - "name": "_8", - "nodeType": "YulTypedName", - "src": "2476:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2548:74:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2566:11:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2576:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_9", - "nodeType": "YulTypedName", - "src": "2570:2:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "2601:2:12" - }, - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "2605:2:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2594:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2594:14:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2594:14:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2517:3:12" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "2522:2:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2513:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2513:12:12" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "2527:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2509:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2509:21:12" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "2532:2:12" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2505:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2505:30:12" - }, - "nodeType": "YulIf", - "src": "2502:120:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2635:35:12", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_3424", - "nodeType": "YulIdentifier", - "src": "2648:20:12" - }, - "nodeType": "YulFunctionCall", - "src": "2648:22:12" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2639:5:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2690:5:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "2731:2:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2735:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2727:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2727:11:12" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "2697:29:12" - }, - "nodeType": "YulFunctionCall", - "src": "2697:42:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2683:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2683:57:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2683:57:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2753:34:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "2779:2:12" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "2783:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2775:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2775:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2769:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "2769:18:12" - }, - "variables": [ - { - "name": "offset_1", - "nodeType": "YulTypedName", - "src": "2757:8:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2832:77:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2850:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2861:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_10", - "nodeType": "YulTypedName", - "src": "2854:3:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "2886:3:12" - }, - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "2891:3:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2879:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2879:16:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2879:16:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "2806:8:12" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2816:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2803:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "2803:16:12" - }, - "nodeType": "YulIf", - "src": "2800:109:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2922:28:12", - "value": { - "arguments": [ - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "2937:2:12" - }, - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "2941:8:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2933:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2933:17:12" - }, - "variables": [ - { - "name": "_11", - "nodeType": "YulTypedName", - "src": "2926:3:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3009:77:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3027:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3038:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_12", - "nodeType": "YulTypedName", - "src": "3031:3:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "3063:3:12" - }, - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "3068:3:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3056:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3056:16:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3056:16:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "2981:3:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2986:2:12", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2977:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2977:12:12" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2991:3:12" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2973:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2973:22:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2966:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2966:30:12" - }, - "nodeType": "YulIf", - "src": "2963:123:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3099:30:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "3120:3:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3125:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3116:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3116:12:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3110:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "3110:19:12" - }, - "variables": [ - { - "name": "_13", - "nodeType": "YulTypedName", - "src": "3103:3:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3157:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "3159:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "3159:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3159:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "3148:3:12" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3153:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3145:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3145:11:12" - }, - "nodeType": "YulIf", - "src": "3142:37:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3192:62:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "3235:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3240:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3231:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3231:12:12" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "3245:2:12" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3227:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3227:21:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3250:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3223:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3223:30:12" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "3207:15:12" - }, - "nodeType": "YulFunctionCall", - "src": "3207:47:12" - }, - "variables": [ - { - "name": "array_1", - "nodeType": "YulTypedName", - "src": "3196:7:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "array_1", - "nodeType": "YulIdentifier", - "src": "3274:7:12" - }, - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "3283:3:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3267:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3267:20:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3267:20:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3347:77:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3365:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3376:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_14", - "nodeType": "YulTypedName", - "src": "3369:3:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_14", - "nodeType": "YulIdentifier", - "src": "3401:3:12" - }, - { - "name": "_14", - "nodeType": "YulIdentifier", - "src": "3406:3:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3394:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3394:16:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3394:16:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "3314:3:12" - }, - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "3319:3:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3310:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3310:13:12" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "3325:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3306:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3306:22:12" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3330:3:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3303:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3303:31:12" - }, - "nodeType": "YulIf", - "src": "3300:124:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "3463:3:12" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "3468:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3459:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3459:12:12" - }, - { - "arguments": [ - { - "name": "array_1", - "nodeType": "YulIdentifier", - "src": "3477:7:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3486:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3473:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3473:16:12" - }, - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "3491:3:12" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3437:21:12" - }, - "nodeType": "YulFunctionCall", - "src": "3437:58:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3437:58:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3519:5:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3526:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3515:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3515:14:12" - }, - { - "name": "array_1", - "nodeType": "YulIdentifier", - "src": "3531:7:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3508:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3508:31:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3508:31:12" - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3559:3:12" - }, - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3564:5:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3552:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3552:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3552:18:12" - }, - { - "nodeType": "YulAssignment", - "src": "3583:19:12", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3594:3:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3599:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3590:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3590:12:12" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3583:3:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2134:3:12" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "2139:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2131:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "2131:15:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2147:23:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2149:19:12", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2160:3:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2165:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2156:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2156:12:12" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2149:3:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2127:3:12", - "statements": [] - }, - "src": "2123:1489:12" - }, - { - "nodeType": "YulAssignment", - "src": "3621:14:12", - "value": { - "name": "dst_1", - "nodeType": "YulIdentifier", - "src": "3630:5:12" - }, - "variableNames": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "3621:5:12" - } - ] - } - ] - }, - "name": "abi_decode_array_struct_Initialization_dyn_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1648:6:12", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1656:3:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "1664:5:12", - "type": "" - } - ], - "src": "1585:2056:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3866:2455:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3912:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3921:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3924:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3914:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3914:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3914:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3887:7:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3896:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3883:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3883:23:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3908:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3879:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3879:32:12" - }, - "nodeType": "YulIf", - "src": "3876:52:12" - }, - { - "nodeType": "YulAssignment", - "src": "3937:50:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3977:9:12" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "3947:29:12" - }, - "nodeType": "YulFunctionCall", - "src": "3947:40:12" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3937:6:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3996:39:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4020:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4031:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4016:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4016:18:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4010:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "4010:25:12" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "4000:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4044:28:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4062:2:12", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4066:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4058:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4058:10:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4070:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4054:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4054:18:12" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "4048:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4099:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4108:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4111:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4101:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4101:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4101:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4087:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4095:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4084:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "4084:14:12" - }, - "nodeType": "YulIf", - "src": "4081:34:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4124:32:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4138:9:12" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4149:6:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4134:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4134:22:12" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "4128:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4204:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4213:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4216:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4206:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4206:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4206:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4183:2:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4187:4:12", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4179:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4179:13:12" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4194:7:12" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4175:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4175:27:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4168:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4168:35:12" - }, - "nodeType": "YulIf", - "src": "4165:55:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4229:19:12", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4245:2:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4239:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "4239:9:12" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "4233:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4257:79:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4332:2:12" - } - ], - "functionName": { - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulIdentifier", - "src": "4284:47:12" - }, - "nodeType": "YulFunctionCall", - "src": "4284:51:12" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "4268:15:12" - }, - "nodeType": "YulFunctionCall", - "src": "4268:68:12" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "4261:3:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4345:16:12", - "value": { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "4358:3:12" - }, - "variables": [ - { - "name": "dst_1", - "nodeType": "YulTypedName", - "src": "4349:5:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "4377:3:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4382:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4370:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4370:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4370:15:12" - }, - { - "nodeType": "YulAssignment", - "src": "4394:19:12", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "4405:3:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4410:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4401:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4401:12:12" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "4394:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4422:42:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4444:2:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4452:1:12", - "type": "", - "value": "5" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4455:2:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4448:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4448:10:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4440:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4440:19:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4461:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4436:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4436:28:12" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "4426:6:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4496:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4505:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4508:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4498:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4498:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4498:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "4479:6:12" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4487:7:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4476:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "4476:19:12" - }, - "nodeType": "YulIf", - "src": "4473:39:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4521:22:12", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4536:2:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4540:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4532:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4532:11:12" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "4525:3:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4608:1481:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4622:29:12", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4647:3:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4641:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "4641:10:12" - }, - "variables": [ - { - "name": "innerOffset", - "nodeType": "YulTypedName", - "src": "4626:11:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4687:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4696:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4699:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4689:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4689:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4689:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "4670:11:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4683:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4667:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "4667:19:12" - }, - "nodeType": "YulIf", - "src": "4664:39:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4716:30:12", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4730:2:12" - }, - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "4734:11:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4726:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4726:20:12" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "4720:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4802:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4811:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4814:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4804:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4804:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4804:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4774:7:12" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "4783:2:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4770:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4770:16:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4792:2:12", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "4788:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4788:7:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4766:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4766:30:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4798:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4762:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4762:39:12" - }, - "nodeType": "YulIf", - "src": "4759:59:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4831:35:12", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_3425", - "nodeType": "YulIdentifier", - "src": "4844:20:12" - }, - "nodeType": "YulFunctionCall", - "src": "4844:22:12" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "4835:5:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4886:5:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "4927:2:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4931:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4923:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4923:11:12" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "4893:29:12" - }, - "nodeType": "YulFunctionCall", - "src": "4893:42:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4879:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4879:57:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4879:57:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4949:33:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "4974:2:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4978:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4970:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4970:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4964:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "4964:18:12" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "4953:7:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5021:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5030:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5033:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5023:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5023:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5023:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5008:7:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5017:1:12", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "5005:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "5005:14:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4998:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4998:22:12" - }, - "nodeType": "YulIf", - "src": "4995:42:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5061:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5068:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5057:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5057:14:12" - }, - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5073:7:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5050:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5050:31:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5050:31:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5094:34:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "5120:2:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5124:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5116:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5116:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5110:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "5110:18:12" - }, - "variables": [ - { - "name": "offset_1", - "nodeType": "YulTypedName", - "src": "5098:8:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5161:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5170:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5173:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5163:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5163:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5163:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "5147:8:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "5157:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "5144:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "5144:16:12" - }, - "nodeType": "YulIf", - "src": "5141:36:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5190:27:12", - "value": { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "5204:2:12" - }, - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "5208:8:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5200:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5200:17:12" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "5194:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5267:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5276:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5279:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5269:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5269:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5269:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "5248:2:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5252:2:12", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5244:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5244:11:12" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "5257:7:12" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "5240:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5240:25:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5233:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5233:33:12" - }, - "nodeType": "YulIf", - "src": "5230:53:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5296:28:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "5316:2:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5320:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5312:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5312:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5306:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "5306:18:12" - }, - "variables": [ - { - "name": "_6", - "nodeType": "YulTypedName", - "src": "5300:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5337:81:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "5414:2:12" - } - ], - "functionName": { - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulIdentifier", - "src": "5366:47:12" - }, - "nodeType": "YulFunctionCall", - "src": "5366:51:12" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "5350:15:12" - }, - "nodeType": "YulFunctionCall", - "src": "5350:68:12" - }, - "variables": [ - { - "name": "dst_2", - "nodeType": "YulTypedName", - "src": "5341:5:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5431:18:12", - "value": { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5444:5:12" - }, - "variables": [ - { - "name": "dst_3", - "nodeType": "YulTypedName", - "src": "5435:5:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5469:5:12" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "5476:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5462:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5462:17:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5462:17:12" - }, - { - "nodeType": "YulAssignment", - "src": "5492:23:12", - "value": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5505:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5512:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5501:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5501:14:12" - }, - "variableNames": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5492:5:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5528:44:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "5552:2:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5560:1:12", - "type": "", - "value": "5" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "5563:2:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "5556:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5556:10:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5548:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5548:19:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5569:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5544:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5544:28:12" - }, - "variables": [ - { - "name": "srcEnd_1", - "nodeType": "YulTypedName", - "src": "5532:8:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5610:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5619:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5622:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5612:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5612:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5612:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd_1", - "nodeType": "YulIdentifier", - "src": "5591:8:12" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "5601:7:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "5588:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "5588:21:12" - }, - "nodeType": "YulIf", - "src": "5585:41:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5639:24:12", - "value": { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "5656:2:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5660:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5652:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5652:11:12" - }, - "variables": [ - { - "name": "src_1", - "nodeType": "YulTypedName", - "src": "5643:5:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5744:230:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "5762:27:12", - "value": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "5783:5:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5777:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "5777:12:12" - }, - "variables": [ - { - "name": "value_2", - "nodeType": "YulTypedName", - "src": "5766:7:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5865:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5874:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5877:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5867:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5867:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5867:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "5819:7:12" - }, - { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "5832:7:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5845:3:12", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5850:10:12", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "5841:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5841:20:12" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5828:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5828:34:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "5816:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "5816:47:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5809:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5809:55:12" - }, - "nodeType": "YulIf", - "src": "5806:75:12" - }, - { - "expression": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5905:5:12" - }, - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "5912:7:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5898:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5898:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5898:22:12" - }, - { - "nodeType": "YulAssignment", - "src": "5937:23:12", - "value": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5950:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5957:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5946:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5946:14:12" - }, - "variableNames": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5937:5:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "5687:5:12" - }, - { - "name": "srcEnd_1", - "nodeType": "YulIdentifier", - "src": "5694:8:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "5684:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "5684:19:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "5704:27:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5706:23:12", - "value": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "5719:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5726:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5715:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5715:14:12" - }, - "variableNames": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "5706:5:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "5680:3:12", - "statements": [] - }, - "src": "5676:298:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5998:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6005:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5994:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5994:14:12" - }, - { - "name": "dst_3", - "nodeType": "YulIdentifier", - "src": "6010:5:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5987:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5987:29:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5987:29:12" - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "6036:3:12" - }, - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6041:5:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6029:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6029:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6029:18:12" - }, - { - "nodeType": "YulAssignment", - "src": "6060:19:12", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "6071:3:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6076:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6067:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6067:12:12" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "6060:3:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4563:3:12" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "4568:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "4560:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "4560:15:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "4576:23:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4578:19:12", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4589:3:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4594:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4585:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4585:12:12" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4578:3:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "4556:3:12", - "statements": [] - }, - "src": "4552:1537:12" - }, - { - "nodeType": "YulAssignment", - "src": "6098:15:12", - "value": { - "name": "dst_1", - "nodeType": "YulIdentifier", - "src": "6108:5:12" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "6098:6:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6122:41:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6148:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6159:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6144:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6144:18:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "6138:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "6138:25:12" - }, - "variables": [ - { - "name": "offset_2", - "nodeType": "YulTypedName", - "src": "6126:8:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6192:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6201:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6204:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6194:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6194:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6194:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_2", - "nodeType": "YulIdentifier", - "src": "6178:8:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "6188:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "6175:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "6175:16:12" - }, - "nodeType": "YulIf", - "src": "6172:36:12" - }, - { - "nodeType": "YulAssignment", - "src": "6217:98:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6285:9:12" - }, - { - "name": "offset_2", - "nodeType": "YulIdentifier", - "src": "6296:8:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6281:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6281:24:12" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "6307:7:12" - } - ], - "functionName": { - "name": "abi_decode_array_struct_Initialization_dyn_fromMemory", - "nodeType": "YulIdentifier", - "src": "6227:53:12" - }, - "nodeType": "YulFunctionCall", - "src": "6227:88:12" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "6217:6:12" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptrt_array$_t_struct$_Initialization_$10_memory_ptr_$dyn_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3816:9:12", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3827:7:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3839:6:12", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3847:6:12", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "3855:6:12", - "type": "" - } - ], - "src": "3646:2675:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6358:95:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6375:1:12", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6382:3:12", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6387:10:12", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "6378:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6378:20:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6368:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6368:31:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6368:31:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6415:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6418:4:12", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6408:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6408:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6408:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6439:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6442:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6432:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6432:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6432:15:12" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "6326:127:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6490:95:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6507:1:12", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6514:3:12", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6519:10:12", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "6510:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6510:20:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6500:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6500:31:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6500:31:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6547:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6550:4:12", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6540:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6540:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6540:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6571:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6574:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6564:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6564:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6564:15:12" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "6458:127:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6637:88:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6668:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "6670:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "6670:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6670:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6653:5:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6664:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "6660:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6660:6:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "6650:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "6650:17:12" - }, - "nodeType": "YulIf", - "src": "6647:43:12" - }, - { - "nodeType": "YulAssignment", - "src": "6699:20:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6710:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6717:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6706:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6706:13:12" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "6699:3:12" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6619:5:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "6629:3:12", - "type": "" - } - ], - "src": "6590:135:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6762:95:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6779:1:12", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6786:3:12", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6791:10:12", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "6782:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6782:20:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6772:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6772:31:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6772:31:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6819:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6822:4:12", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6812:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6812:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6812:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6843:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6846:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6836:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6836:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6836:15:12" - } - ] - }, - "name": "panic_error_0x21", - "nodeType": "YulFunctionDefinition", - "src": "6730:127:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7036:229:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7053:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7064:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7046:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7046:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7046:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7087:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7098:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7083:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7083:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7103:2:12", - "type": "", - "value": "39" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7076:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7076:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7076:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7126:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7137:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7122:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7122:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a20496e636f72726563742046616365744375", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7142:34:12", - "type": "", - "value": "LibDiamondCut: Incorrect FacetCu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7115:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7115:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7115:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7197:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7208:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7193:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7193:18:12" - }, - { - "hexValue": "74416374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7213:9:12", - "type": "", - "value": "tAction" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7186:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7186:37:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7186:37:12" - }, - { - "nodeType": "YulAssignment", - "src": "7232:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7244:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7255:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7240:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7240:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7232:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7013:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7027:4:12", - "type": "" - } - ], - "src": "6862:403:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7314:60:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7331:3:12" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7340:5:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7355:3:12", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7360:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "7351:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7351:11:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7364:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "7347:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7347:19:12" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7336:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7336:31:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7324:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7324:44:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7324:44:12" - } - ] - }, - "name": "abi_encode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7298:5:12", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "7305:3:12", - "type": "" - } - ], - "src": "7270:104:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7428:208:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7438:26:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7458:5:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7452:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "7452:12:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7442:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7480:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7485:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7473:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7473:19:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7473:19:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7527:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7534:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7523:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7523:16:12" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7545:3:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7550:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7541:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7541:14:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7557:6:12" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "7501:21:12" - }, - "nodeType": "YulFunctionCall", - "src": "7501:63:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7501:63:12" - }, - { - "nodeType": "YulAssignment", - "src": "7573:57:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7588:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7601:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7609:2:12", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7597:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7597:15:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7618:2:12", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "7614:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7614:7:12" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7593:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7593:29:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7584:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7584:39:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7625:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7580:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7580:50:12" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "7573:3:12" - } - ] - } - ] - }, - "name": "abi_encode_bytes", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7405:5:12", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "7412:3:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "7420:3:12", - "type": "" - } - ], - "src": "7379:257:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7916:1813:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7926:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7936:2:12", - "type": "", - "value": "96" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "7930:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7947:32:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7965:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7976:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7961:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7961:18:12" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "7951:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7995:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8006:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7988:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7988:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7988:21:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8018:17:12", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "8029:6:12" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "8022:3:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8044:27:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8064:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8058:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "8058:13:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "8048:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "8087:6:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8095:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8080:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8080:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8080:22:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8111:13:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8121:3:12", - "type": "", - "value": "128" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "8115:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "8133:25:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8144:9:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "8155:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8140:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8140:18:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8133:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8167:53:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8189:9:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8204:1:12", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8207:6:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "8200:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8200:14:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8185:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8185:30:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "8217:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8181:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8181:39:12" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "8171:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8229:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8239:4:12", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "8233:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8252:29:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8270:6:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "8278:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8266:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8266:15:12" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "8256:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8290:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8299:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "8294:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8358:1200:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8379:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8392:6:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8400:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "8388:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8388:22:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8416:3:12", - "type": "", - "value": "127" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "8412:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8412:8:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8384:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8384:37:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8372:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8372:50:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8372:50:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8435:23:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "8451:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8445:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "8445:13:12" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "8439:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8471:29:12", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8489:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8497:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8485:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8485:15:12" - }, - "variables": [ - { - "name": "tail_3", - "nodeType": "YulTypedName", - "src": "8475:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8520:6:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "8538:2:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8532:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "8532:9:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8551:3:12", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8556:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "8547:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8547:11:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8560:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "8543:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8543:19:12" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8528:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8528:35:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8513:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8513:51:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8513:51:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8577:38:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "8607:2:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "8611:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8603:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8603:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8597:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "8597:18:12" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "8581:12:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8671:127:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8696:1:12", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8703:3:12", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8708:10:12", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "8699:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8699:20:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8689:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8689:31:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8689:31:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8744:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8747:4:12", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8737:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8737:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8737:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8776:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8779:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "8769:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8769:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8769:15:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "8641:12:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8655:1:12", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "8638:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "8638:19:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "8631:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8631:27:12" - }, - "nodeType": "YulIf", - "src": "8628:170:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8822:6:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "8830:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8818:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8818:15:12" - }, - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "8835:12:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8811:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8811:37:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8811:37:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8861:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8871:4:12", - "type": "", - "value": "0x40" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "8865:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8888:40:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "8920:2:12" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "8924:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8916:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8916:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8910:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "8910:18:12" - }, - "variables": [ - { - "name": "memberValue0_1", - "nodeType": "YulTypedName", - "src": "8892:14:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8952:6:12" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "8960:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8948:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8948:15:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8965:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8941:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8941:27:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8941:27:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8981:19:12", - "value": { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "8994:6:12" - }, - "variables": [ - { - "name": "pos_1", - "nodeType": "YulTypedName", - "src": "8985:5:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9013:37:12", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "9035:14:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9029:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "9029:21:12" - }, - "variables": [ - { - "name": "length_1", - "nodeType": "YulTypedName", - "src": "9017:8:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "9070:6:12" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "9078:8:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9063:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9063:24:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9063:24:12" - }, - { - "nodeType": "YulAssignment", - "src": "9100:24:12", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9113:6:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "9121:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9109:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9109:15:12" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9100:5:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9137:39:12", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "9157:14:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9173:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9153:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9153:23:12" - }, - "variables": [ - { - "name": "srcPtr_1", - "nodeType": "YulTypedName", - "src": "9141:8:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9189:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9200:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i_1", - "nodeType": "YulTypedName", - "src": "9193:3:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9275:175:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9300:5:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9317:8:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9311:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "9311:15:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9332:3:12", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9337:10:12", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "9328:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9328:20:12" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "9307:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9307:42:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9293:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9293:57:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9293:57:12" - }, - { - "nodeType": "YulAssignment", - "src": "9367:23:12", - "value": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9380:5:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9387:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9376:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9376:14:12" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9367:5:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9407:29:12", - "value": { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9423:8:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9433:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9419:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9419:17:12" - }, - "variableNames": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9407:8:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9225:3:12" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "9230:8:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "9222:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "9222:17:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "9240:22:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "9242:18:12", - "value": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9253:3:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9258:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9249:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9249:11:12" - }, - "variableNames": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9242:3:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "9218:3:12", - "statements": [] - }, - "src": "9214:236:12" - }, - { - "nodeType": "YulAssignment", - "src": "9463:15:12", - "value": { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9473:5:12" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9463:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9491:25:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "9505:6:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9513:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9501:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9501:15:12" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "9491:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9529:19:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9540:3:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9545:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9536:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9536:12:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9529:3:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8320:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8323:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "8317:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "8317:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "8331:18:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8333:14:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8342:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8345:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8338:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8338:9:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8333:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "8313:3:12", - "statements": [] - }, - "src": "8309:1249:12" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "9586:6:12" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9598:9:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9609:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9594:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9594:18:12" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "9567:18:12" - }, - "nodeType": "YulFunctionCall", - "src": "9567:46:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9567:46:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9633:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9644:4:12", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9629:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9629:20:12" - }, - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9655:6:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9663:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9651:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9651:22:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9622:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9622:52:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9622:52:12" - }, - { - "nodeType": "YulAssignment", - "src": "9683:40:12", - "value": { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "9708:6:12" - }, - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9716:6:12" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "9691:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "9691:32:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9683:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7869:9:12", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "7880:6:12", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "7888:6:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "7896:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7907:4:12", - "type": "" - } - ], - "src": "7641:2088:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9908:250:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9925:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9936:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9918:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9918:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9918:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9959:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9970:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9955:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9955:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9975:2:12", - "type": "", - "value": "60" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9948:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9948:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9948:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9998:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10009:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9994:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9994:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e6974206973206164647265737328", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10014:34:12", - "type": "", - "value": "LibDiamondCut: _init is address(" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9987:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9987:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9987:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10069:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10080:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10065:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10065:18:12" - }, - { - "hexValue": "3029206275745f63616c6c64617461206973206e6f7420656d707479", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10085:30:12", - "type": "", - "value": "0) but_calldata is not empty" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10058:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10058:58:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10058:58:12" - }, - { - "nodeType": "YulAssignment", - "src": "10125:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10137:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10148:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10133:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10133:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10125:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9885:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "9899:4:12", - "type": "" - } - ], - "src": "9734:424:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10337:251:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10354:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10365:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10347:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10347:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10347:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10388:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10399:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10384:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10384:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10404:2:12", - "type": "", - "value": "61" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10377:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10377:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10377:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10427:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10438:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10423:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10423:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d7074", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10443:34:12", - "type": "", - "value": "LibDiamondCut: _calldata is empt" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10416:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10416:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10416:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10498:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10509:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10494:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10494:18:12" - }, - { - "hexValue": "7920627574205f696e6974206973206e6f742061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10514:31:12", - "type": "", - "value": "y but _init is not address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10487:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10487:59:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10487:59:12" - }, - { - "nodeType": "YulAssignment", - "src": "10555:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10567:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10578:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10563:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10563:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10555:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10314:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10328:4:12", - "type": "" - } - ], - "src": "10163:425:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10730:137:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "10740:27:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "10760:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "10754:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "10754:13:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "10744:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "10802:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10810:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10798:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10798:17:12" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10817:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "10822:6:12" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "10776:21:12" - }, - "nodeType": "YulFunctionCall", - "src": "10776:53:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10776:53:12" - }, - { - "nodeType": "YulAssignment", - "src": "10838:23:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10849:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "10854:6:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10845:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10845:16:12" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "10838:3:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "10706:3:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "10711:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "10722:3:12", - "type": "" - } - ], - "src": "10593:274:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10993:98:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11010:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11021:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11003:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11003:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11003:21:12" - }, - { - "nodeType": "YulAssignment", - "src": "11033:52:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "11058:6:12" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11070:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11081:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11066:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11066:18:12" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "11041:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "11041:44:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11033:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10962:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "10973:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10984:4:12", - "type": "" - } - ], - "src": "10872:219:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11270:228:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11287:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11298:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11280:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11280:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11280:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11321:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11332:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11317:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11317:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11337:2:12", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11310:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11310:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11310:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11360:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11371:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11356:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11356:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11376:34:12", - "type": "", - "value": "LibDiamondCut: _init function re" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11349:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11349:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11349:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11431:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11442:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11427:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11427:18:12" - }, - { - "hexValue": "766572746564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11447:8:12", - "type": "", - "value": "verted" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11420:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11420:36:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11420:36:12" - }, - { - "nodeType": "YulAssignment", - "src": "11465:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11477:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11488:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11473:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11473:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11465:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11247:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11261:4:12", - "type": "" - } - ], - "src": "11096:402:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11677:233:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11694:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11705:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11687:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11687:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11687:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11728:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11739:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11724:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11724:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11744:2:12", - "type": "", - "value": "43" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11717:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11717:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11717:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11767:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11778:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11763:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11763:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11783:34:12", - "type": "", - "value": "LibDiamondCut: No selectors in f" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11756:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11756:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11756:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11838:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11849:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11834:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11834:18:12" - }, - { - "hexValue": "6163657420746f20637574", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11854:13:12", - "type": "", - "value": "acet to cut" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11827:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11827:41:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11827:41:12" - }, - { - "nodeType": "YulAssignment", - "src": "11877:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11889:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11900:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11885:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11885:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11877:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11654:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11668:4:12", - "type": "" - } - ], - "src": "11503:407:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12089:234:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12106:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12117:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12099:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12099:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12099:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12140:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12151:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12136:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12136:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12156:2:12", - "type": "", - "value": "44" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12129:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12129:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12129:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12179:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12190:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12175:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12175:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204164642066616365742063616e27742062", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12195:34:12", - "type": "", - "value": "LibDiamondCut: Add facet can't b" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12168:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12168:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12168:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12250:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12261:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12246:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12246:18:12" - }, - { - "hexValue": "652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12266:14:12", - "type": "", - "value": "e address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12239:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12239:42:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12239:42:12" - }, - { - "nodeType": "YulAssignment", - "src": "12290:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12302:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12313:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12298:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12298:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12290:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12066:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12080:4:12", - "type": "" - } - ], - "src": "11915:408:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12502:243:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12519:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12530:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12512:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12512:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12512:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12553:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12564:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12549:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12549:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12569:2:12", - "type": "", - "value": "53" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12542:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12542:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12542:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12592:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12603:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12588:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12588:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12608:34:12", - "type": "", - "value": "LibDiamondCut: Can't add functio" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12581:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12581:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12581:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12663:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12674:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12659:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12659:18:12" - }, - { - "hexValue": "6e207468617420616c726561647920657869737473", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12679:23:12", - "type": "", - "value": "n that already exists" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12652:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12652:51:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12652:51:12" - }, - { - "nodeType": "YulAssignment", - "src": "12712:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12724:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12735:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12720:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12720:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12712:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12479:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12493:4:12", - "type": "" - } - ], - "src": "12328:417:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12796:163:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "12806:28:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12824:2:12", - "type": "", - "value": "96" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12828:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "12820:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12820:10:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12832:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "12816:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12816:18:12" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "12810:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "12843:29:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "12862:5:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "12869:2:12" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "12858:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12858:14:12" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "12847:7:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12900:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "12902:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "12902:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12902:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "12887:7:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "12896:2:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "12884:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "12884:15:12" - }, - "nodeType": "YulIf", - "src": "12881:41:12" - }, - { - "nodeType": "YulAssignment", - "src": "12931:22:12", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "12942:7:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12951:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12938:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12938:15:12" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "12931:3:12" - } - ] - } - ] - }, - "name": "increment_t_uint96", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "12778:5:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "12788:3:12", - "type": "" - } - ], - "src": "12750:209:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13138:246:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13155:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13166:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13148:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13148:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13148:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13189:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13200:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13185:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13185:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13205:2:12", - "type": "", - "value": "56" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13178:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13178:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13178:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13228:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13239:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13224:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13224:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13244:34:12", - "type": "", - "value": "LibDiamondCut: Can't replace fun" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13217:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13217:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13217:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13299:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13310:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13295:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13295:18:12" - }, - { - "hexValue": "6374696f6e20776974682073616d652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13315:26:12", - "type": "", - "value": "ction with same function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13288:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13288:54:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13288:54:12" - }, - { - "nodeType": "YulAssignment", - "src": "13351:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13363:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13374:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13359:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13359:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13351:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13115:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13129:4:12", - "type": "" - } - ], - "src": "12964:420:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13563:244:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13580:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13591:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13573:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13573:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13573:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13614:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13625:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13610:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13610:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13630:2:12", - "type": "", - "value": "54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13603:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13603:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13603:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13653:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13664:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13649:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13649:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13669:34:12", - "type": "", - "value": "LibDiamondCut: Remove facet addr" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13642:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13642:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13642:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13724:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13735:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13720:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13720:18:12" - }, - { - "hexValue": "657373206d7573742062652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13740:24:12", - "type": "", - "value": "ess must be address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13713:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13713:52:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13713:52:12" - }, - { - "nodeType": "YulAssignment", - "src": "13774:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13786:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13797:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13782:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13782:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13774:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13540:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13554:4:12", - "type": "" - } - ], - "src": "13389:418:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13986:245:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14003:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14014:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13996:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13996:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13996:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14037:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14048:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14033:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14033:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14053:2:12", - "type": "", - "value": "55" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14026:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14026:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14026:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14076:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14087:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14072:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14072:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e63", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14092:34:12", - "type": "", - "value": "LibDiamondCut: Can't remove func" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14065:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14065:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14065:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14147:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14158:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14143:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14143:18:12" - }, - { - "hexValue": "74696f6e207468617420646f65736e2774206578697374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14163:25:12", - "type": "", - "value": "tion that doesn't exist" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14136:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14136:53:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14136:53:12" - }, - { - "nodeType": "YulAssignment", - "src": "14198:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14210:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14221:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14206:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14206:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14198:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13963:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13977:4:12", - "type": "" - } - ], - "src": "13812:419:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14410:236:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14427:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14438:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14420:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14420:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14420:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14461:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14472:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14457:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14457:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14477:2:12", - "type": "", - "value": "46" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14450:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14450:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14450:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14500:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14511:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14496:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14496:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d75", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14516:34:12", - "type": "", - "value": "LibDiamondCut: Can't remove immu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14489:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14489:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14489:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14571:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14582:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14567:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14567:18:12" - }, - { - "hexValue": "7461626c652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14587:16:12", - "type": "", - "value": "table function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14560:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14560:44:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14560:44:12" - }, - { - "nodeType": "YulAssignment", - "src": "14613:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14625:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14636:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14621:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14621:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14613:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14387:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "14401:4:12", - "type": "" - } - ], - "src": "14236:410:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14700:76:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "14722:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "14724:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "14724:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14724:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "14716:1:12" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "14719:1:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "14713:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "14713:8:12" - }, - "nodeType": "YulIf", - "src": "14710:34:12" - }, - { - "nodeType": "YulAssignment", - "src": "14753:17:12", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "14765:1:12" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "14768:1:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "14761:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14761:9:12" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "14753:4:12" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "14682:1:12", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "14685:1:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "14691:4:12", - "type": "" - } - ], - "src": "14651:125:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14813:95:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14830:1:12", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14837:3:12", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14842:10:12", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "14833:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14833:20:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14823:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14823:31:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14823:31:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14870:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14873:4:12", - "type": "", - "value": "0x31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14863:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14863:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14863:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14894:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14897:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "14887:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14887:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14887:15:12" - } - ] - }, - "name": "panic_error_0x31", - "nodeType": "YulFunctionDefinition", - "src": "14781:127:12" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_3424() -> memPtr\n {\n memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(0x40, newFreePtr)\n }\n function allocate_memory_3425() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 96)\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_array_struct_FacetCut_dyn(length) -> size\n {\n if gt(length, sub(shl(64, 1), 1)) { panic_error_0x41() }\n size := add(shl(5, length), 0x20)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_array_struct_Initialization_dyn_fromMemory(offset, end) -> array\n {\n let _1 := 0x1f\n if iszero(slt(add(offset, _1), end)) { revert(0, 0) }\n let _2 := mload(offset)\n let _3 := 0x20\n let dst := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_2))\n let dst_1 := dst\n mstore(dst, _2)\n dst := add(dst, _3)\n let srcEnd := add(add(offset, shl(5, _2)), _3)\n if gt(srcEnd, end) { revert(0, 0) }\n let src := add(offset, _3)\n for { } lt(src, srcEnd) { src := add(src, _3) }\n {\n let innerOffset := mload(src)\n let _4 := sub(shl(64, 1), 1)\n if gt(innerOffset, _4)\n {\n let _5 := 0\n revert(_5, _5)\n }\n let _6 := add(offset, innerOffset)\n let _7 := 0x40\n let _8 := not(31)\n if slt(add(sub(end, _6), _8), _7)\n {\n let _9 := 0\n revert(_9, _9)\n }\n let value := allocate_memory_3424()\n mstore(value, abi_decode_address_fromMemory(add(_6, _3)))\n let offset_1 := mload(add(_6, _7))\n if gt(offset_1, _4)\n {\n let _10 := 0\n revert(_10, _10)\n }\n let _11 := add(_6, offset_1)\n if iszero(slt(add(_11, 63), end))\n {\n let _12 := 0\n revert(_12, _12)\n }\n let _13 := mload(add(_11, _3))\n if gt(_13, _4) { panic_error_0x41() }\n let array_1 := allocate_memory(add(and(add(_13, _1), _8), _3))\n mstore(array_1, _13)\n if gt(add(add(_11, _13), _7), end)\n {\n let _14 := 0\n revert(_14, _14)\n }\n copy_memory_to_memory(add(_11, _7), add(array_1, _3), _13)\n mstore(add(value, _3), array_1)\n mstore(dst, value)\n dst := add(dst, _3)\n }\n array := dst_1\n }\n function abi_decode_tuple_t_addresst_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptrt_array$_t_struct$_Initialization_$10_memory_ptr_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n let offset := mload(add(headStart, 32))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n let dst := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_3))\n let dst_1 := dst\n mstore(dst, _3)\n dst := add(dst, 32)\n let srcEnd := add(add(_2, shl(5, _3)), 32)\n if gt(srcEnd, dataEnd) { revert(0, 0) }\n let src := add(_2, 32)\n for { } lt(src, srcEnd) { src := add(src, 32) }\n {\n let innerOffset := mload(src)\n if gt(innerOffset, _1) { revert(0, 0) }\n let _4 := add(_2, innerOffset)\n if slt(add(sub(dataEnd, _4), not(31)), 96) { revert(0, 0) }\n let value := allocate_memory_3425()\n mstore(value, abi_decode_address_fromMemory(add(_4, 32)))\n let value_1 := mload(add(_4, 64))\n if iszero(lt(value_1, 3)) { revert(0, 0) }\n mstore(add(value, 32), value_1)\n let offset_1 := mload(add(_4, 96))\n if gt(offset_1, _1) { revert(0, 0) }\n let _5 := add(_4, offset_1)\n if iszero(slt(add(_5, 63), dataEnd)) { revert(0, 0) }\n let _6 := mload(add(_5, 32))\n let dst_2 := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_6))\n let dst_3 := dst_2\n mstore(dst_2, _6)\n dst_2 := add(dst_2, 32)\n let srcEnd_1 := add(add(_5, shl(5, _6)), 64)\n if gt(srcEnd_1, dataEnd) { revert(0, 0) }\n let src_1 := add(_5, 64)\n for { } lt(src_1, srcEnd_1) { src_1 := add(src_1, 32) }\n {\n let value_2 := mload(src_1)\n if iszero(eq(value_2, and(value_2, shl(224, 0xffffffff)))) { revert(0, 0) }\n mstore(dst_2, value_2)\n dst_2 := add(dst_2, 32)\n }\n mstore(add(value, 64), dst_3)\n mstore(dst, value)\n dst := add(dst, 32)\n }\n value1 := dst_1\n let offset_2 := mload(add(headStart, 64))\n if gt(offset_2, _1) { revert(0, 0) }\n value2 := abi_decode_array_struct_Initialization_dyn_fromMemory(add(headStart, offset_2), dataEnd)\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, not(0)) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function panic_error_0x21()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 39)\n mstore(add(headStart, 64), \"LibDiamondCut: Incorrect FacetCu\")\n mstore(add(headStart, 96), \"tAction\")\n tail := add(headStart, 128)\n }\n function abi_encode_address(value, pos)\n {\n mstore(pos, and(value, sub(shl(160, 1), 1)))\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n let _1 := 96\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 128\n pos := add(headStart, _2)\n let tail_2 := add(add(headStart, shl(5, length)), _2)\n let _3 := 0x20\n let srcPtr := add(value0, _3)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(127)))\n let _4 := mload(srcPtr)\n let tail_3 := add(tail_2, _1)\n mstore(tail_2, and(mload(_4), sub(shl(160, 1), 1)))\n let memberValue0 := mload(add(_4, _3))\n if iszero(lt(memberValue0, 3))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n mstore(add(tail_2, _3), memberValue0)\n let _5 := 0x40\n let memberValue0_1 := mload(add(_4, _5))\n mstore(add(tail_2, _5), _1)\n let pos_1 := tail_3\n let length_1 := mload(memberValue0_1)\n mstore(tail_3, length_1)\n pos_1 := add(tail_2, _2)\n let srcPtr_1 := add(memberValue0_1, _3)\n let i_1 := 0\n for { } lt(i_1, length_1) { i_1 := add(i_1, 1) }\n {\n mstore(pos_1, and(mload(srcPtr_1), shl(224, 0xffffffff)))\n pos_1 := add(pos_1, _3)\n srcPtr_1 := add(srcPtr_1, _3)\n }\n tail_2 := pos_1\n srcPtr := add(srcPtr, _3)\n pos := add(pos, _3)\n }\n abi_encode_address(value1, add(headStart, _3))\n mstore(add(headStart, 0x40), sub(tail_2, headStart))\n tail := abi_encode_bytes(value2, tail_2)\n }\n function abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 60)\n mstore(add(headStart, 64), \"LibDiamondCut: _init is address(\")\n mstore(add(headStart, 96), \"0) but_calldata is not empty\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 61)\n mstore(add(headStart, 64), \"LibDiamondCut: _calldata is empt\")\n mstore(add(headStart, 96), \"y but _init is not address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"LibDiamondCut: _init function re\")\n mstore(add(headStart, 96), \"verted\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 43)\n mstore(add(headStart, 64), \"LibDiamondCut: No selectors in f\")\n mstore(add(headStart, 96), \"acet to cut\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"LibDiamondCut: Add facet can't b\")\n mstore(add(headStart, 96), \"e address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 53)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't add functio\")\n mstore(add(headStart, 96), \"n that already exists\")\n tail := add(headStart, 128)\n }\n function increment_t_uint96(value) -> ret\n {\n let _1 := sub(shl(96, 1), 1)\n let value_1 := and(value, _1)\n if eq(value_1, _1) { panic_error_0x11() }\n ret := add(value_1, 1)\n }\n function abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 56)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't replace fun\")\n mstore(add(headStart, 96), \"ction with same function\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 54)\n mstore(add(headStart, 64), \"LibDiamondCut: Remove facet addr\")\n mstore(add(headStart, 96), \"ess must be address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 55)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove func\")\n mstore(add(headStart, 96), \"tion that doesn't exist\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 46)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove immu\")\n mstore(add(headStart, 96), \"table function\")\n tail := add(headStart, 128)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y) { panic_error_0x11() }\n diff := sub(x, y)\n }\n function panic_error_0x31()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x31)\n revert(0, 0x24)\n }\n}", - "id": 12, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0x321E CODESIZE SUB DUP1 PUSH3 0x321E DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x1340 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO PUSH3 0x4C JUMPI PUSH3 0x4C DUP4 PUSH3 0xF7 PUSH1 0x20 SHL PUSH3 0x107 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x74 DUP3 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH3 0x17B PUSH1 0x20 SHL PUSH3 0x1C1 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH3 0xED JUMPI PUSH3 0xD8 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x9A JUMPI PUSH3 0x9A PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0xBB JUMPI PUSH3 0xBB PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH3 0x3D9 PUSH1 0x20 SHL PUSH3 0x405 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 PUSH3 0xE4 DUP2 PUSH3 0x1540 JUMP JUMPDEST SWAP2 POP POP PUSH3 0x77 JUMP JUMPDEST POP POP POP POP PUSH3 0x173D JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3172 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH3 0x38A JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x19F JUMPI PUSH3 0x19F PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x1C3 JUMPI PUSH3 0x1C3 PUSH3 0x155E JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x1D8 JUMPI PUSH3 0x1D8 PUSH3 0x155E JUMP JUMPDEST EQ ISZERO PUSH3 0x237 JUMPI PUSH3 0x231 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x1F8 JUMPI PUSH3 0x1F8 PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x219 JUMPI PUSH3 0x219 PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH3 0x5FE PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x374 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x24E JUMPI PUSH3 0x24E PUSH3 0x155E JUMP JUMPDEST EQ ISZERO PUSH3 0x2A7 JUMPI PUSH3 0x231 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x26E JUMPI PUSH3 0x26E PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x28F JUMPI PUSH3 0x28F PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH3 0x888 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x2BE JUMPI PUSH3 0x2BE PUSH3 0x155E JUMP JUMPDEST EQ ISZERO PUSH3 0x317 JUMPI PUSH3 0x231 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x2DE JUMPI PUSH3 0x2DE PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x2FF JUMPI PUSH3 0x2FF PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH3 0xB1E PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x3A20B1BA34B7B7 PUSH1 0xC9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 PUSH3 0x381 DUP2 PUSH3 0x1540 JUMP JUMPDEST SWAP2 POP POP PUSH3 0x17E JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH3 0x3C0 SWAP4 SWAP3 SWAP2 SWAP1 PUSH3 0x15A2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH3 0x3D4 DUP3 DUP3 PUSH3 0x3D9 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x463 JUMPI DUP1 MLOAD ISZERO PUSH3 0x45F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH3 0x4DC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ PUSH3 0x512 JUMPI PUSH3 0x512 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x3192 PUSH1 0x28 SWAP2 CODECOPY PUSH3 0xC7E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD PUSH3 0x52F SWAP2 SWAP1 PUSH3 0x16A9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x56C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x571 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH3 0x5F8 JUMPI DUP1 MLOAD ISZERO PUSH3 0x5A0 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x36B SWAP2 SWAP1 PUSH3 0x16C7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1D995C9D1959 PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH3 0x654 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x31FE DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3172 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH3 0x6C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x31BA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x652061646472657373283029 PUSH1 0xA0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP2 AND PUSH3 0x6F6 JUMPI PUSH3 0x6F6 DUP3 DUP6 PUSH3 0xCA2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH3 0x881 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x71A JUMPI PUSH3 0x71A PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH3 0x7C2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E207468617420616C7265616479206578697374730000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND OR SWAP1 SSTORE DUP4 PUSH3 0x866 DUP2 PUSH3 0x16E3 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH3 0x878 SWAP1 PUSH3 0x1540 JUMP JUMPDEST SWAP2 POP POP PUSH3 0x6F9 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH3 0x8DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x31FE DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3172 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH3 0x94A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x31BA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x652061646472657373283029 PUSH1 0xA0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP2 AND PUSH3 0x980 JUMPI PUSH3 0x980 DUP3 DUP6 PUSH3 0xCA2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH3 0x881 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x9A4 JUMPI PUSH3 0x9A4 PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 EQ ISZERO PUSH3 0xA52 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH3 0xA5F DUP6 DUP3 DUP5 PUSH3 0xD0F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND OR SWAP1 SSTORE DUP4 PUSH3 0xB03 DUP2 PUSH3 0x16E3 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH3 0xB15 SWAP1 PUSH3 0x1540 JUMP JUMPDEST SWAP2 POP POP PUSH3 0x983 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH3 0xB74 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x31FE DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x3172 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO PUSH3 0xC03 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x657373206D757374206265206164647265737328302900000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH3 0x5F8 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xC27 JUMPI PUSH3 0xC27 PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0xC66 DUP5 DUP3 DUP5 PUSH3 0xD0F JUMP JUMPDEST POP POP DUP1 DUP1 PUSH3 0xC75 SWAP1 PUSH3 0x1540 JUMP JUMPDEST SWAP2 POP POP PUSH3 0xC06 JUMP JUMPDEST DUP2 EXTCODESIZE DUP2 DUP2 PUSH3 0x5F8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x36B SWAP2 SWAP1 PUSH3 0x16C7 JUMP JUMPDEST PUSH3 0xCC7 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x31DA PUSH1 0x24 SWAP2 CODECOPY PUSH3 0xC7E JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xD8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ ISZERO PUSH3 0xDFF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x3A30B1363290333AB731BA34B7B7 PUSH1 0x91 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP3 SWAP2 PUSH3 0xE50 SWAP2 PUSH3 0x170D JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH3 0xF49 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH3 0xE89 JUMPI PUSH3 0xE89 PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH3 0xEDD JUMPI PUSH3 0xEDD PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH3 0xF75 JUMPI PUSH3 0xF75 PUSH3 0x1727 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE DUP1 PUSH3 0x881 JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH3 0xFD7 SWAP1 PUSH1 0x1 SWAP1 PUSH3 0x170D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH3 0x108D JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH3 0x101A JUMPI PUSH3 0x101A PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH3 0x104E JUMPI PUSH3 0x104E PUSH3 0x1514 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH3 0x10A3 JUMPI PUSH3 0x10A3 PUSH3 0x1727 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1104 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x1144 JUMPI PUSH3 0x1144 PUSH3 0x1109 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x1144 JUMPI PUSH3 0x1144 PUSH3 0x1109 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x119A JUMPI PUSH3 0x119A PUSH3 0x1109 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH3 0x11BE JUMPI PUSH3 0x11BE PUSH3 0x1109 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x11E5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x11CB JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x5F8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP4 DUP2 DUP5 ADD SLT PUSH3 0x120A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x20 PUSH3 0x1223 PUSH3 0x121D DUP4 PUSH3 0x11A2 JUMP JUMPDEST PUSH3 0x116F JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP6 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP8 DUP5 GT ISZERO PUSH3 0x1243 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP8 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x1334 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1269 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP1 DUP10 ADD SWAP1 PUSH1 0x40 PUSH1 0x1F NOT DUP4 DUP14 SUB DUP2 ADD DUP3 SGT ISZERO PUSH3 0x1285 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH3 0x128F PUSH3 0x111F JUMP JUMPDEST PUSH3 0x129C DUP10 DUP7 ADD PUSH3 0x10EC JUMP JUMPDEST DUP2 MSTORE DUP3 DUP6 ADD MLOAD DUP5 DUP2 GT ISZERO PUSH3 0x12B1 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP1 DUP7 ADD SWAP6 POP POP DUP14 PUSH1 0x3F DUP7 ADD SLT PUSH3 0x12C8 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP9 DUP6 ADD MLOAD DUP5 DUP2 GT ISZERO PUSH3 0x12DF JUMPI PUSH3 0x12DF PUSH3 0x1109 JUMP JUMPDEST PUSH3 0x12F0 DUP11 DUP5 DUP15 DUP5 ADD AND ADD PUSH3 0x116F JUMP JUMPDEST SWAP5 POP DUP1 DUP6 MSTORE DUP15 DUP5 DUP3 DUP9 ADD ADD GT ISZERO PUSH3 0x130A JUMPI PUSH1 0x0 SWAP3 POP DUP3 DUP4 REVERT JUMPDEST PUSH3 0x131B DUP2 DUP12 DUP8 ADD DUP7 DUP10 ADD PUSH3 0x11C8 JUMP JUMPDEST POP DUP1 DUP10 ADD SWAP4 SWAP1 SWAP4 MSTORE POP POP DUP5 MSTORE POP SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH3 0x1247 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x1356 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1361 DUP5 PUSH3 0x10EC JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x137F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1394 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x13A5 PUSH3 0x121D DUP3 PUSH3 0x11A2 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP DUP10 DUP4 GT ISZERO PUSH3 0x13C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x14E0 JUMPI DUP1 MLOAD DUP6 DUP2 GT ISZERO PUSH3 0x13E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 ADD PUSH1 0x60 DUP2 DUP14 SUB PUSH1 0x1F NOT ADD SLT ISZERO PUSH3 0x13FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1407 PUSH3 0x114A JUMP JUMPDEST PUSH3 0x1415 PUSH1 0x20 DUP4 ADD PUSH3 0x10EC JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x3 DUP2 LT PUSH3 0x142A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD DUP8 DUP2 GT ISZERO PUSH3 0x1442 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 ADD SWAP3 POP POP DUP13 PUSH1 0x3F DUP4 ADD SLT PUSH3 0x1458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH3 0x146C PUSH3 0x121D DUP3 PUSH3 0x11A2 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x5 SWAP2 SWAP1 SWAP2 SHL DUP4 ADD PUSH1 0x40 ADD SWAP1 PUSH1 0x20 DUP2 ADD SWAP1 DUP16 DUP4 GT ISZERO PUSH3 0x148E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP6 ADD SWAP5 POP JUMPDEST DUP3 DUP6 LT ISZERO PUSH3 0x14C9 JUMPI DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH3 0x14B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x1495 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE POP POP DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH3 0x13CD JUMP JUMPDEST POP PUSH1 0x40 DUP10 ADD MLOAD SWAP1 SWAP7 POP SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH3 0x14FB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x150A DUP7 DUP3 DUP8 ADD PUSH3 0x11F7 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH3 0x1557 JUMPI PUSH3 0x1557 PUSH3 0x152A JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH3 0x158E DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH3 0x11C8 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x1677 JUMPI DUP10 DUP5 SUB PUSH1 0x7F NOT ADD DUP7 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE DUP4 DUP2 ADD MLOAD DUP10 DUP7 ADD SWAP1 PUSH1 0x3 DUP2 LT PUSH3 0x1613 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH3 0x1661 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH3 0x1635 JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x15CB JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH3 0x169B DUP2 DUP10 PUSH3 0x1574 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x16BD DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x11C8 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH3 0x16DC PUSH1 0x20 DUP4 ADD DUP5 PUSH3 0x1574 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 DUP2 AND DUP1 DUP3 EQ ISZERO PUSH3 0x1703 JUMPI PUSH3 0x1703 PUSH3 0x152A JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH3 0x1722 JUMPI PUSH3 0x1722 PUSH3 0x152A JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1A25 DUP1 PUSH3 0x174D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0xB JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xE3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4469616D6F6E643A2046756E6374696F6E20646F6573206E6F74206578697374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x102 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E1 JUMPI PUSH2 0x1E1 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x202 JUMPI PUSH2 0x202 PUSH2 0x1686 JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x214 JUMPI PUSH2 0x214 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x263 JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x22F JUMPI PUSH2 0x22F PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x24D JUMPI PUSH2 0x24D PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x6BE JUMP JUMPDEST PUSH2 0x3A7 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x277 JUMPI PUSH2 0x277 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x2C1 JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x292 JUMPI PUSH2 0x292 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2B0 JUMPI PUSH2 0x2B0 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xA71 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2D5 JUMPI PUSH2 0x2D5 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x31F JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2F0 JUMPI PUSH2 0x2F0 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x30E JUMPI PUSH2 0x30E PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xE2E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74416374696F6E00000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP DUP1 PUSH2 0x3B2 DUP2 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1C4 JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1793 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x400 DUP3 DUP3 PUSH2 0x405 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x4B3 JUMPI DUP1 MLOAD ISZERO PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x544 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x583 JUMPI PUSH2 0x583 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19A4 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x101B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x5AB SWAP2 SWAP1 PUSH2 0x18FB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x5E6 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5EB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x6B8 JUMPI DUP1 MLOAD ISZERO PUSH2 0x630 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xDA SWAP2 SWAP1 PUSH2 0x1917 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7665727465640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x74F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x813 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x858 JUMPI PUSH2 0x858 DUP3 DUP6 PUSH2 0x1056 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xA6A JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x878 JUMPI PUSH2 0x878 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x95D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E207468617420616C7265616479206578697374730000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xA52 DUP2 PUSH2 0x1931 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xA62 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x85B JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xBC6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xC0B JUMPI PUSH2 0xC0B DUP3 DUP6 PUSH2 0x1056 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xA6A JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC2B JUMPI PUSH2 0xC2B PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 EQ ISZERO PUSH2 0xD16 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH2 0xD21 DUP6 DUP3 DUP5 PUSH2 0x10E5 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xE16 DUP2 PUSH2 0x1931 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xE26 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC0E JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xEBF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO PUSH2 0xF84 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x657373206D757374206265206164647265737328302900000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x6B8 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xFA4 JUMPI PUSH2 0xFA4 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1006 DUP5 DUP3 DUP5 PUSH2 0x10E5 JUMP JUMPDEST POP POP DUP1 DUP1 PUSH2 0x1013 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xF87 JUMP JUMPDEST DUP2 EXTCODESIZE DUP2 DUP2 PUSH2 0x6B8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xDA SWAP2 SWAP1 PUSH2 0x1917 JUMP JUMPDEST PUSH2 0x1078 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19CC PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x101B JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x1188 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ ISZERO PUSH2 0x122E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7461626C652066756E6374696F6E000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP2 DIV PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 PUSH2 0x12B8 SWAP2 PUSH2 0x195D JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0x13FF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x12FA JUMPI PUSH2 0x12FA PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x1358 JUMPI PUSH2 0x1358 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x1435 JUMPI PUSH2 0x1435 PUSH2 0x1974 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE DUP1 PUSH2 0xA6A JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x14CA SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x195D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x15B8 JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1516 JUMPI PUSH2 0x1516 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1554 JUMPI PUSH2 0x1554 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0x15CB JUMPI PUSH2 0x15CB PUSH2 0x1974 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1716 JUMPI PUSH2 0x1716 PUSH2 0x16B5 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1738 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1720 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x6B8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1761 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x171D JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x18BE JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP11 DUP6 SUB ADD DUP7 MSTORE DUP2 MLOAD DUP9 DUP6 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP5 DUP3 ADD MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x1845 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x18A9 JUMPI DUP4 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x1867 JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x17BC JUMP JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x18ED DUP2 DUP10 PUSH2 0x1749 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x190D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x171D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x192A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1749 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x1953 JUMPI PUSH2 0x1953 PUSH2 0x16B5 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x196F JUMPI PUSH2 0x196F PUSH2 0x16B5 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2646970 PUSH7 0x73582212202B18 0xA5 CALLER 0xB0 CALLDATACOPY SUB 0xE1 ORIGIN PUSH1 0x0 0xCF 0x2F CALLDATASIZE 0xB1 0xC6 0xEC PUSH4 0x1CFF163A PUSH22 0x2D939E5EE79AD2CDE364736F6C634300080A0033C8FC 0xAD DUP14 0xB8 0x4D EXTCODECOPY 0xC1 DUP12 0x4C COINBASE 0xD5 MLOAD 0xEA 0xE 0xE6 PUSH14 0xD599CDE068D998E57D5E09332C13 SHR 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204164642066616365742063616E277420624C69 PUSH3 0x446961 PUSH14 0x6F6E644375743A204E6577206661 PUSH4 0x65742068 PUSH2 0x7320 PUSH15 0x6F20636F64654C69624469616D6F6E PUSH5 0x4375743A20 0x4E PUSH16 0x2073656C6563746F727320696E206600 ", - "sourceMap": "509:2322:0:-:0;;;1023:522;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1196:28:0;;;1192:102;;1240:43;1268:14;1240:27;;;;;:43;;:::i;:::-;1304:50;1326:11;1347:1;1304:50;;;;;;;;;;;;:21;;;;;:50;;:::i;:::-;1370:9;1365:174;1389:16;:23;1385:1;:27;1365:174;;;1433:95;1465:16;1482:1;1465:19;;;;;;;;:::i;:::-;;;;;;;:32;;;1499:16;1516:1;1499:19;;;;;;;;:::i;:::-;;;;;;;:28;;;1433:31;;;;;:95;;:::i;:::-;1414:3;;;;:::i;:::-;;;;1365:174;;;;1023:522;;;509:2322;;1851:264:11;1993:16;;;-1:-1:-1;;;;;;2019:28:11;;-1:-1:-1;;;;;2019:28:11;;;;;;;;;2062:46;;-1:-1:-1;;;;;;;;;;;492:45:11;1993:16;;;;;;2062:46;;1915:25;;2062:46;1905:210;;1851:264;:::o;2563:1067::-;2719:18;2714:806;2752:11;:18;2739:10;:31;2714:806;;;2800:33;2836:11;2848:10;2836:23;;;;;;;;:::i;:::-;;;;;;;:30;;;2800:66;;2894:30;2884:40;;;;;;;;:::i;:::-;:6;:40;;;;;;;;:::i;:::-;;2880:630;;;2944:93;2957:11;2969:10;2957:23;;;;;;;;:::i;:::-;;;;;;;:36;;;2995:11;3007:10;2995:23;;;;;;;;:::i;:::-;;;;;;;:41;;;2944:12;;;:93;;:::i;:::-;2880:630;;;3072:34;3062:6;:44;;;;;;;;:::i;:::-;;3058:452;;;3126:97;3143:11;3155:10;3143:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3181:11;3193:10;3181:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3126:16;;;:97;;:::i;3058:452::-;3258:33;3248:6;:43;;;;;;;;:::i;:::-;;3244:266;;;3311:96;3327:11;3339:10;3327:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3365:11;3377:10;3365:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3311:15;;;:96;;:::i;3244:266::-;3446:49;;-1:-1:-1;;;3446:49:11;;7064:2:12;3446:49:11;;;7046:21:12;7103:2;7083:18;;;7076:30;7142:34;7122:18;;;7115:62;-1:-1:-1;;;7193:18:12;;;7186:37;7240:19;;3446:49:11;;;;;;;;3244:266;-1:-1:-1;2772:12:11;;;;:::i;:::-;;;;2714:806;;;;3534:41;3545:11;3558:5;3565:9;3534:41;;;;;;;;:::i;:::-;;;;;;;;3585:38;3606:5;3613:9;3585:20;:38::i;:::-;2563:1067;;;:::o;9541:871::-;-1:-1:-1;;;;;9633:19:11;;9629:777;;9676:16;;:21;9668:94;;;;-1:-1:-1;;;9668:94:11;;9936:2:12;9668:94:11;;;9918:21:12;9975:2;9955:18;;;9948:30;10014:34;9994:18;;;9987:62;10085:30;10065:18;;;10058:58;10133:19;;9668:94:11;9734:424:12;9668:94:11;9541:871;;:::o;9629:777::-;9820:1;9801:9;:16;:20;9793:94;;;;-1:-1:-1;;;9793:94:11;;10365:2:12;9793:94:11;;;10347:21:12;10404:2;10384:18;;;10377:30;10443:34;10423:18;;;10416:62;10514:31;10494:18;;;10487:59;10563:19;;9793:94:11;10163:425:12;9793:94:11;-1:-1:-1;;;;;9905:22:11;;9922:4;9905:22;9901:134;;9947:73;9970:5;9947:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;10049:12;10063:18;10085:5;-1:-1:-1;;;;;10085:18:11;10104:9;10085:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10048:66;;;;10133:7;10128:268;;10164:12;;:16;10160:222;;10261:5;10247:21;;-1:-1:-1;;;10247:21:11;;;;;;;;:::i;10160:222::-;10315:48;;-1:-1:-1;;;10315:48:11;;11298:2:12;10315:48:11;;;11280:21:12;11337:2;11317:18;;;11310:30;11376:34;11356:18;;;11349:62;-1:-1:-1;;;11427:18:12;;;11420:36;11473:19;;10315:48:11;11096:402:12;10160:222:11;9779:627;;9541:871;;:::o;3636:1089::-;3772:1;3744:18;:25;:29;3736:85;;;;-1:-1:-1;;;3736:85:11;;11705:2:12;3736:85:11;;;11687:21:12;11744:2;11724:18;;;11717:30;-1:-1:-1;;;;;;;;;;;11763:18:12;;;11756:62;-1:-1:-1;;;11834:18:12;;;11827:41;11885:19;;3736:85:11;11503:407:12;3736:85:11;-1:-1:-1;;;;;;;;;;;;;;;;3901:27:11;;3893:84;;;;-1:-1:-1;;;3893:84:11;;12117:2:12;3893:84:11;;;12099:21:12;12156:2;12136:18;;;12129:30;-1:-1:-1;;;;;;;;;;;12175:18:12;;;12168:62;-1:-1:-1;;;12246:18:12;;;12239:42;12298:19;;3893:84:11;11915:408:12;3893:84:11;-1:-1:-1;;;;;4020:40:11;;3987:23;4020:40;;;:25;;;:40;;;;;:65;-1:-1:-1;;;;;4154:21:11;;4150:91;;4191:27;4200:2;4204:13;4191:8;:27::i;:::-;4255:21;4250:469;4294:18;:25;4278:13;:41;4250:469;;;4352:15;4370:18;4389:13;4370:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;4443:39:11;;4417:23;4443:39;;;;;;;;;;;:52;4370:33;;-1:-1:-1;;;;;;4443:52:11;4517:29;;4509:95;;;;-1:-1:-1;;;4509:95:11;;12530:2:12;4509:95:11;;;12512:21:12;12569:2;12549:18;;;12542:30;12608:34;12588:18;;;12581:62;12679:23;12659:18;;;12652:51;12720:19;;4509:95:11;12328:417:12;4509:95:11;-1:-1:-1;;;;;;7084:40:11;;:29;:40;;;;;;;;;;;:85;;-1:-1:-1;;;;;7084:85:11;;;-1:-1:-1;;;;;;;;7084:85:11;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;-1:-1:-1;;;;;;7263:69:11;;;;4690:18;;;;:::i;:::-;;;;4338:381;;4321:15;;;;;:::i;:::-;;;;4250:469;;;;3726:999;;3636:1089;;:::o;4731:1138::-;4871:1;4843:18;:25;:29;4835:85;;;;-1:-1:-1;;;4835:85:11;;11705:2:12;4835:85:11;;;11687:21:12;11744:2;11724:18;;;11717:30;-1:-1:-1;;;;;;;;;;;11763:18:12;;;11756:62;-1:-1:-1;;;11834:18:12;;;11827:41;11885:19;;4835:85:11;11503:407:12;4835:85:11;-1:-1:-1;;;;;;;;;;;;;;;;4992:27:11;;4984:84;;;;-1:-1:-1;;;4984:84:11;;12117:2:12;4984:84:11;;;12099:21:12;12156:2;12136:18;;;12129:30;-1:-1:-1;;;;;;;;;;;12175:18:12;;;12168:62;-1:-1:-1;;;12246:18:12;;;12239:42;12298:19;;4984:84:11;11915:408:12;4984:84:11;-1:-1:-1;;;;;5111:40:11;;5078:23;5111:40;;;:25;;;:40;;;;;:65;-1:-1:-1;;;;;5245:21:11;;5241:79;;5282:27;5291:2;5295:13;5282:8;:27::i;:::-;5334:21;5329:534;5373:18;:25;5357:13;:41;5329:534;;;5431:15;5449:18;5468:13;5449:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;5522:39:11;;5496:23;5522:39;;;;;;;;;;;:52;5449:33;;-1:-1:-1;;;;;;5522:52:11;;;;5596:32;;;;;5588:101;;;;-1:-1:-1;;;5588:101:11;;13166:2:12;5588:101:11;;;13148:21:12;13205:2;13185:18;;;13178:30;13244:34;13224:18;;;13217:62;13315:26;13295:18;;;13288:54;13359:19;;5588:101:11;12964:420:12;5588:101:11;5703:45;5718:2;5722:15;5739:8;5703:14;:45::i;:::-;-1:-1:-1;;;;;;7084:40:11;;:29;:40;;;;;;;;;;;:85;;-1:-1:-1;;;;;7084:85:11;;;-1:-1:-1;;;;;;;;7084:85:11;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;-1:-1:-1;;;;;;7263:69:11;;;;5834:18;;;;:::i;:::-;;;;5417:446;;5400:15;;;;;:::i;:::-;;;;5329:534;;5875:742;6014:1;5986:18;:25;:29;5978:85;;;;-1:-1:-1;;;5978:85:11;;11705:2:12;5978:85:11;;;11687:21:12;11744:2;11724:18;;;11717:30;-1:-1:-1;;;;;;;;;;;11763:18:12;;;11756:62;-1:-1:-1;;;11834:18:12;;;11827:41;11885:19;;5978:85:11;11503:407:12;5978:85:11;-1:-1:-1;;;;;;;;;;;;;;;;6200:27:11;;;6192:94;;;;-1:-1:-1;;;6192:94:11;;13591:2:12;6192:94:11;;;13573:21:12;13630:2;13610:18;;;13603:30;13669:34;13649:18;;;13642:62;13740:24;13720:18;;;13713:52;13782:19;;6192:94:11;13389:418:12;6192:94:11;6301:21;6296:315;6340:18;:25;6324:13;:41;6296:315;;;6398:15;6416:18;6435:13;6416:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;6489:39:11;;6463:23;6489:39;;;;;;;;;;;:52;6416:33;;-1:-1:-1;;;;;;6489:52:11;6555:45;6489:2;:52;6416:33;6555:14;:45::i;:::-;6384:227;;6367:15;;;;;:::i;:::-;;;;6296:315;;10418:261;10591:22;;10658:13;10640:16;10632:40;;;;-1:-1:-1;;;10632:40:11;;;;;;;;:::i;6623:316::-;6710:77;6733:13;6710:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;6861:17;;;:24;;-1:-1:-1;;;;;6797:40:11;;;;;;;:25;;;;:40;;;;;;;:61;;:88;;;6895:37;;;;;;;;;;;;;;-1:-1:-1;;;;;;6895:37:11;;;;;;6623:316::o;7345:2190::-;-1:-1:-1;;;;;7472:27:11;;7464:95;;;;-1:-1:-1;;;7464:95:11;;14014:2:12;7464:95:11;;;13996:21:12;14053:2;14033:18;;;14026:30;14092:34;14072:18;;;14065:62;14163:25;14143:18;;;14136:53;14206:19;;7464:95:11;13812:419:12;7464:95:11;-1:-1:-1;;;;;7654:30:11;;7679:4;7654:30;;7646:89;;;;-1:-1:-1;;;7646:89:11;;14438:2:12;7646:89:11;;;14420:21:12;14477:2;14457:18;;;14450:30;14516:34;14496:18;;;14489:62;-1:-1:-1;;;14567:18:12;;;14560:44;14621:19;;7646:89:11;14236:410:12;7646:89:11;-1:-1:-1;;;;;;7846:40:11;;7819:24;7846:40;;;;;;;;;;;:65;-1:-1:-1;;;;;7952:40:11;;;;8020:1;7952:25;;;:40;;;;;;:65;-1:-1:-1;;;7846:65:11;;;-1:-1:-1;;;;;7846:65:11;;7819:24;7952:69;;;:::i;:::-;7921:100;;8123:20;8103:16;:40;8099:387;;-1:-1:-1;;;;;8181:40:11;;8159:19;8181:40;;;:25;;;:40;;;;;:80;;8240:20;;8181:80;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;8275:40:11;;;;:25;;;:40;;;;;;;:76;;8181:80;;;;;;;;;;;;;;-1:-1:-1;8181:80:11;;8275:40;8334:16;;8275:76;;;;;;:::i;:::-;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8380:43:11;;;;;;;;;;;;:95;;-1:-1:-1;;;;;8380:95:11;-1:-1:-1;;;;;;;;8380:95:11;;;;;;8099:387;-1:-1:-1;;;;;8531:40:11;;;;;;:25;;;:40;;;;;:64;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;8531:64:11;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8612:40:11;;;;;;;;;;8605:47;8747:25;8743:786;;8914:17;;;:24;8879:32;;8914:28;;8941:1;;8914:28;:::i;:::-;-1:-1:-1;;;;;8987:40:11;;8956:28;8987:40;;;:25;;;;:40;;;;;;:61;;8879:63;;-1:-1:-1;9066:48:11;;;9062:338;;9134:24;9161:2;:17;;9179:24;9161:43;;;;;;;;:::i;:::-;;;;;;;;;;;9222:17;;;:39;;-1:-1:-1;;;;;9161:43:11;;;;-1:-1:-1;9161:43:11;;9240:20;;9222:39;;;;;;:::i;:::-;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;9222:58:11;-1:-1:-1;;;;;9222:58:11;;;;;;9298:43;;;;;;-1:-1:-1;9298:25:11;;;:43;;;;;;:64;:87;;;9062:338;9413:2;:17;;:23;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;9413:23:11;;;;;-1:-1:-1;;;;;;9413:23:11;;;;;;;;;-1:-1:-1;;;;;9457:40:11;;;;9413:23;9457:25;;;:40;;;;;;:61;9450:68;-1:-1:-1;;7446:2089:11;;7345:2190;;;:::o;14:177:12:-;93:13;;-1:-1:-1;;;;;135:31:12;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:257;400:4;394:11;;;432:17;;-1:-1:-1;;;;;464:34:12;;500:22;;;461:62;458:88;;;526:18;;:::i;:::-;562:4;555:24;328:257;:::o;590:251::-;662:2;656:9;704:2;692:15;;-1:-1:-1;;;;;722:34:12;;758:22;;;719:62;716:88;;;784:18;;:::i;846:275::-;917:2;911:9;982:2;963:13;;-1:-1:-1;;959:27:12;947:40;;-1:-1:-1;;;;;1002:34:12;;1038:22;;;999:62;996:88;;;1064:18;;:::i;:::-;1100:2;1093:22;846:275;;-1:-1:-1;846:275:12:o;1126:191::-;1194:4;-1:-1:-1;;;;;1216:30:12;;1213:56;;;1249:18;;:::i;:::-;-1:-1:-1;1294:1:12;1290:14;1306:4;1286:25;;1126:191::o;1322:258::-;1394:1;1404:113;1418:6;1415:1;1412:13;1404:113;;;1494:11;;;1488:18;1475:11;;;1468:39;1440:2;1433:10;1404:113;;;1535:6;1532:1;1529:13;1526:48;;;-1:-1:-1;;1570:1:12;1552:16;;1545:27;1322:258::o;1585:2056::-;1664:5;1694:4;1738:3;1733:2;1725:6;1721:15;1717:25;1707:53;;1756:1;1753;1746:12;1707:53;1785:6;1779:13;1811:4;1835:68;1851:51;1899:2;1851:51;:::i;:::-;1835:68;:::i;:::-;1937:15;;;2023:1;2019:10;;;;2007:23;;2003:32;;;1968:12;;;;2047:15;;;2044:35;;;2075:1;2072;2065:12;2044:35;2111:2;2103:6;2099:15;2123:1489;2139:6;2134:3;2131:15;2123:1489;;;2212:10;;-1:-1:-1;;;;;2279:19:12;;;2276:109;;;2339:1;2368:2;2364;2357:14;2276:109;2408:24;;;;2455:4;-1:-1:-1;;2513:12:12;;;2509:21;;2505:30;-1:-1:-1;2502:120:12;;;2576:1;2605:2;2601;2594:14;2502:120;2648:22;;:::i;:::-;2697:42;2735:2;2731;2727:11;2697:42;:::i;:::-;2690:5;2683:57;2783:2;2779;2775:11;2769:18;2816:2;2806:8;2803:16;2800:109;;;2861:1;2891:3;2886;2879:16;2800:109;2941:8;2937:2;2933:17;2922:28;;;2991:3;2986:2;2981:3;2977:12;2973:22;2963:123;;3038:1;3068:3;3063;3056:16;2963:123;3125:2;3120:3;3116:12;3110:19;3153:2;3148:3;3145:11;3142:37;;;3159:18;;:::i;:::-;3207:47;3250:2;3245;3240;3235:3;3231:12;3227:21;3223:30;3207:47;:::i;:::-;3192:62;;3283:3;3274:7;3267:20;3330:3;3325:2;3319:3;3314;3310:13;3306:22;3303:31;3300:124;;;3376:1;3365:12;;3406:3;3401;3394:16;3300:124;3437:58;3491:3;3486:2;3477:7;3473:16;3468:2;3463:3;3459:12;3437:58;:::i;:::-;-1:-1:-1;3515:14:12;;;3508:31;;;;-1:-1:-1;;3552:18:12;;-1:-1:-1;3590:12:12;;;;2156;;2123:1489;;;-1:-1:-1;3630:5:12;1585:2056;-1:-1:-1;;;;;;;1585:2056:12:o;3646:2675::-;3839:6;3847;3855;3908:2;3896:9;3887:7;3883:23;3879:32;3876:52;;;3924:1;3921;3914:12;3876:52;3947:40;3977:9;3947:40;:::i;:::-;4031:2;4016:18;;4010:25;3937:50;;-1:-1:-1;;;;;;4084:14:12;;;4081:34;;;4111:1;4108;4101:12;4081:34;4149:6;4138:9;4134:22;4124:32;;4194:7;4187:4;4183:2;4179:13;4175:27;4165:55;;4216:1;4213;4206:12;4165:55;4245:2;4239:9;4268:68;4284:51;4332:2;4284:51;:::i;4268:68::-;4358:3;4382:2;4377:3;4370:15;4410:2;4405:3;4401:12;4394:19;;4461:2;4455;4452:1;4448:10;4444:2;4440:19;4436:28;4422:42;;4487:7;4479:6;4476:19;4473:39;;;4508:1;4505;4498:12;4473:39;4540:2;4536;4532:11;4552:1537;4568:6;4563:3;4560:15;4552:1537;;;4647:3;4641:10;4683:2;4670:11;4667:19;4664:39;;;4699:1;4696;4689:12;4664:39;4726:20;;4798:2;4770:16;;;-1:-1:-1;;4766:30:12;4762:39;4759:59;;;4814:1;4811;4804:12;4759:59;4844:22;;:::i;:::-;4893:42;4931:2;4927;4923:11;4893:42;:::i;:::-;4886:5;4879:57;4978:2;4974;4970:11;4964:18;5017:1;5008:7;5005:14;4995:42;;5033:1;5030;5023:12;4995:42;5068:2;5057:14;;5050:31;5124:2;5116:11;;5110:18;5144:16;;;5141:36;;;5173:1;5170;5163:12;5141:36;5208:8;5204:2;5200:17;5190:27;;;5257:7;5252:2;5248;5244:11;5240:25;5230:53;;5279:1;5276;5269:12;5230:53;5320:2;5316;5312:11;5306:18;5350:68;5366:51;5414:2;5366:51;:::i;5350:68::-;5462:17;;;5560:1;5556:10;;;;5548:19;;5569:2;5544:28;;5512:2;5501:14;;;5588:21;;;5585:41;;;5622:1;5619;5612:12;5585:41;5660:2;5656;5652:11;5639:24;;5676:298;5694:8;5687:5;5684:19;5676:298;;;5777:12;;-1:-1:-1;;;;;;5828:34:12;;5816:47;;5806:75;;5877:1;5874;5867:12;5806:75;5898:22;;5957:2;5715:14;;;;5946;;;;5676:298;;;6005:2;5994:14;;5987:29;-1:-1:-1;;6029:18:12;;-1:-1:-1;6076:2:12;6067:12;;;;4585;4552:1537;;;-1:-1:-1;6159:2:12;6144:18;;6138:25;6108:5;;-1:-1:-1;6138:25:12;-1:-1:-1;;;6175:16:12;;;6172:36;;;6204:1;6201;6194:12;6172:36;;6227:88;6307:7;6296:8;6285:9;6281:24;6227:88;:::i;:::-;6217:98;;;3646:2675;;;;;:::o;6326:127::-;6387:10;6382:3;6378:20;6375:1;6368:31;6418:4;6415:1;6408:15;6442:4;6439:1;6432:15;6458:127;6519:10;6514:3;6510:20;6507:1;6500:31;6550:4;6547:1;6540:15;6574:4;6571:1;6564:15;6590:135;6629:3;-1:-1:-1;;6650:17:12;;6647:43;;;6670:18;;:::i;:::-;-1:-1:-1;6717:1:12;6706:13;;6590:135::o;6730:127::-;6791:10;6786:3;6782:20;6779:1;6772:31;6822:4;6819:1;6812:15;6846:4;6843:1;6836:15;7379:257;7420:3;7458:5;7452:12;7485:6;7480:3;7473:19;7501:63;7557:6;7550:4;7545:3;7541:14;7534:4;7527:5;7523:16;7501:63;:::i;:::-;7618:2;7597:15;-1:-1:-1;;7593:29:12;7584:39;;;;7625:4;7580:50;;7379:257;-1:-1:-1;;7379:257:12:o;7641:2088::-;7907:4;7936:2;7976;7965:9;7961:18;8006:2;7995:9;7988:21;8029:6;8064;8058:13;8095:6;8087;8080:22;8121:3;8111:13;;8155:2;8144:9;8140:18;8133:25;;8217:2;8207:6;8204:1;8200:14;8189:9;8185:30;8181:39;8239:4;8278:2;8270:6;8266:15;8299:1;8309:1249;8323:6;8320:1;8317:13;8309:1249;;;8388:22;;;-1:-1:-1;;8384:37:12;8372:50;;8445:13;;8532:9;;-1:-1:-1;;;;;8528:35:12;8513:51;;8603:11;;;8597:18;8485:15;;;;8655:1;8638:19;;8628:170;;8708:10;8703:3;8699:20;8696:1;8689:31;8747:4;8744:1;8737:15;8779:4;8776:1;8769:15;8628:170;8818:15;;;8811:37;8871:4;8916:11;;;8910:18;8948:15;;;8941:27;;;9029:21;;9063:24;;;;9153:23;;;;-1:-1:-1;;9109:15:12;;;;9214:236;9230:8;9225:3;9222:17;9214:236;;;9311:15;;-1:-1:-1;;;;;;9307:42:12;9293:57;;9419:17;;;;9258:1;9249:11;;;;;9376:14;;;;9214:236;;;-1:-1:-1;9536:12:12;;;;9473:5;-1:-1:-1;;;9501:15:12;;;;8345:1;8338:9;8309:1249;;;-1:-1:-1;;;;;;;7336:31:12;;9594:18;;;7324:44;9651:22;;;9644:4;9629:20;;9622:52;9691:32;9655:6;9708;9691:32;:::i;:::-;9683:40;7641:2088;-1:-1:-1;;;;;;;;;;7641:2088:12:o;10593:274::-;10722:3;10760:6;10754:13;10776:53;10822:6;10817:3;10810:4;10802:6;10798:17;10776:53;:::i;:::-;10845:16;;;;;10593:274;-1:-1:-1;;10593:274:12:o;10872:219::-;11021:2;11010:9;11003:21;10984:4;11041:44;11081:2;11070:9;11066:18;11058:6;11041:44;:::i;:::-;11033:52;10872:219;-1:-1:-1;;;10872:219:12:o;12750:209::-;12788:3;-1:-1:-1;;;;;12858:14:12;;;12884:15;;;12881:41;;;12902:18;;:::i;:::-;12951:1;12938:15;;12750:209;-1:-1:-1;;;12750:209:12:o;14651:125::-;14691:4;14719:1;14716;14713:8;14710:34;;;14724:18;;:::i;:::-;-1:-1:-1;14761:9:12;;14651:125::o;14781:127::-;14842:10;14837:3;14833:20;14830:1;14823:31;14873:4;14870:1;14863:15;14897:4;14894:1;14887:15;14781:127;509:2322:0;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_112": { - "entryPoint": null, - "id": 112, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_116": { - "entryPoint": null, - "id": 116, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@addFacet_1286": { - "entryPoint": 4182, - "id": 1286, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@addFunction_1327": { - "entryPoint": null, - "id": 1327, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@addFunctions_1084": { - "entryPoint": 1726, - "id": 1084, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@diamondCut_983": { - "entryPoint": 449, - "id": 983, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@enforceHasContractCode_1590": { - "entryPoint": 4123, - "id": 1590, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@initializeDiamondCut_1571": { - "entryPoint": 1029, - "id": 1571, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@removeFunction_1494": { - "entryPoint": 4325, - "id": 1494, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@removeFunctions_1253": { - "entryPoint": 3630, - "id": 1253, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@replaceFunctions_1188": { - "entryPoint": 2673, - "id": 1188, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@setContractOwner_843": { - "entryPoint": 263, - "id": 843, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_encode_address": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_bytes": { - "entryPoint": 5961, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 6395, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 6035, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 6423, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_6e6486aeb9db70da259b7171a739046119facaec2d8a6bd46f1145fe8391014a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 6493, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 5917, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "increment_t_uint256": { - "entryPoint": 5860, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "increment_t_uint96": { - "entryPoint": 6449, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 5813, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x21": { - "entryPoint": 5766, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x31": { - "entryPoint": 6516, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 5719, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:9784:12", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:12", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "188:182:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "205:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "216:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "198:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "198:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "198:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "239:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "250:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "235:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "235:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "255:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "228:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "228:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "228:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "278:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "289:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "274:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "274:18:12" - }, - { - "hexValue": "4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "294:34:12", - "type": "", - "value": "Diamond: Function does not exist" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "267:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "267:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "267:62:12" - }, - { - "nodeType": "YulAssignment", - "src": "338:26:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "350:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "361:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "346:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "346:18:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "338:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_6e6486aeb9db70da259b7171a739046119facaec2d8a6bd46f1145fe8391014a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "165:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "179:4:12", - "type": "" - } - ], - "src": "14:356:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "407:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "424:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "427:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "417:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "417:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "417:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "521:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "524:4:12", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "514:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "514:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "514:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "545:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "548:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "538:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "538:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "538:15:12" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "375:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "596:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "613:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "616:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "606:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "606:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "606:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "710:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "713:4:12", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "703:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "703:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "703:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "734:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "737:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "727:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "727:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "727:15:12" - } - ] - }, - "name": "panic_error_0x21", - "nodeType": "YulFunctionDefinition", - "src": "564:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "927:229:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "944:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "955:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "937:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "937:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "937:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "978:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "989:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "974:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "974:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "994:2:12", - "type": "", - "value": "39" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "967:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "967:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "967:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1017:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1028:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1013:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1013:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a20496e636f72726563742046616365744375", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1033:34:12", - "type": "", - "value": "LibDiamondCut: Incorrect FacetCu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1006:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1006:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1006:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1088:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1099:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1084:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1084:18:12" - }, - { - "hexValue": "74416374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1104:9:12", - "type": "", - "value": "tAction" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1077:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1077:37:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1077:37:12" - }, - { - "nodeType": "YulAssignment", - "src": "1123:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1135:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1146:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1131:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1131:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1123:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "904:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "918:4:12", - "type": "" - } - ], - "src": "753:403:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1193:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1210:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1213:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1203:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1203:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1203:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1307:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1310:4:12", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1300:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1300:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1300:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1331:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1334:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1324:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1324:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1324:15:12" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "1161:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1397:148:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1488:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "1490:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "1490:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1490:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1413:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1420:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1410:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1410:77:12" - }, - "nodeType": "YulIf", - "src": "1407:103:12" - }, - { - "nodeType": "YulAssignment", - "src": "1519:20:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1530:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1537:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1526:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1526:13:12" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "1519:3:12" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1379:5:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "1389:3:12", - "type": "" - } - ], - "src": "1350:195:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1594:83:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1611:3:12" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1620:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1627:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1616:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1616:54:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1604:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1604:67:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1604:67:12" - } - ] - }, - "name": "abi_encode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1578:5:12", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1585:3:12", - "type": "" - } - ], - "src": "1550:127:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1735:205:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1745:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1754:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1749:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1814:63:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1839:3:12" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1844:1:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1835:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1835:11:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "1858:3:12" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1863:1:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1854:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1854:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1848:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "1848:18:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1828:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1828:39:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1828:39:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1775:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1778:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1772:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1772:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1786:19:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1788:15:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1797:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1800:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1793:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1793:10:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1788:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1768:3:12", - "statements": [] - }, - "src": "1764:113:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1903:31:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1916:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1921:6:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1912:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1912:16:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1930:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1905:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1905:27:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1905:27:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1892:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1895:6:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1889:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1889:13:12" - }, - "nodeType": "YulIf", - "src": "1886:48:12" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "1713:3:12", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "1718:3:12", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1723:6:12", - "type": "" - } - ], - "src": "1682:258:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1994:267:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2004:26:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2024:5:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2018:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "2018:12:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2008:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2046:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2051:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2039:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2039:19:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2039:19:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2093:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2100:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2089:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2089:16:12" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2111:3:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2116:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2107:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2107:14:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2123:6:12" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "2067:21:12" - }, - "nodeType": "YulFunctionCall", - "src": "2067:63:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2067:63:12" - }, - { - "nodeType": "YulAssignment", - "src": "2139:116:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2154:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2167:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2175:2:12", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2163:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2163:15:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2180:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2159:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2159:88:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2150:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2150:98:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2250:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2146:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2146:109:12" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2139:3:12" - } - ] - } - ] - }, - "name": "abi_encode_bytes", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1971:5:12", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1978:3:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1986:3:12", - "type": "" - } - ], - "src": "1945:316:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2541:1997:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2551:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2561:2:12", - "type": "", - "value": "96" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2555:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2572:32:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2590:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2601:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2586:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2586:18:12" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "2576:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2620:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2631:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2613:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2613:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2613:21:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2643:17:12", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "2654:6:12" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2647:3:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2669:27:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2689:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2683:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "2683:13:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2673:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "2712:6:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2720:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2705:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2705:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2705:22:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2736:13:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2746:3:12", - "type": "", - "value": "128" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "2740:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2758:25:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2769:9:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2780:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2765:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2765:18:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2758:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2792:53:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2814:9:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2829:1:12", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2832:6:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2825:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2825:14:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2810:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2810:30:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2842:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2806:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2806:39:12" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "2796:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2854:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2864:4:12", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "2858:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2877:29:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2895:6:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2903:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2891:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2891:15:12" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "2881:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2915:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2924:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2919:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2983:1384:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3004:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3017:6:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3025:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3013:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3013:22:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3037:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3009:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3009:95:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2997:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2997:108:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2997:108:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3118:23:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "3134:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3128:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "3128:13:12" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "3122:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3154:29:12", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3172:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3180:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3168:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3168:15:12" - }, - "variables": [ - { - "name": "tail_3", - "nodeType": "YulTypedName", - "src": "3158:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3203:6:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3221:2:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3215:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "3215:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3226:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3211:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3211:58:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3196:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3196:74:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3196:74:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3283:38:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3313:2:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3317:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3309:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3309:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3303:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "3303:18:12" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "3287:12:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3377:184:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3402:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3405:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3395:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3395:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3395:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3507:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3510:4:12", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3500:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3500:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3500:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3539:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3542:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3532:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3532:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3532:15:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "3347:12:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3361:1:12", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3344:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3344:19:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3337:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3337:27:12" - }, - "nodeType": "YulIf", - "src": "3334:227:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3585:6:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3593:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3581:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3581:15:12" - }, - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "3598:12:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3574:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3574:37:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3574:37:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3624:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3634:4:12", - "type": "", - "value": "0x40" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "3628:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3651:40:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3683:2:12" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "3687:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3679:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3679:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3673:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "3673:18:12" - }, - "variables": [ - { - "name": "memberValue0_1", - "nodeType": "YulTypedName", - "src": "3655:14:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3715:6:12" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "3723:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3711:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3711:15:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3728:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3704:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3704:27:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3704:27:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3744:19:12", - "value": { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "3757:6:12" - }, - "variables": [ - { - "name": "pos_1", - "nodeType": "YulTypedName", - "src": "3748:5:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3776:37:12", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "3798:14:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3792:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "3792:21:12" - }, - "variables": [ - { - "name": "length_1", - "nodeType": "YulTypedName", - "src": "3780:8:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "3833:6:12" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "3841:8:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3826:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3826:24:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3826:24:12" - }, - { - "nodeType": "YulAssignment", - "src": "3863:24:12", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3876:6:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "3884:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3872:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3872:15:12" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "3863:5:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3900:39:12", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "3920:14:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3936:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3916:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3916:23:12" - }, - "variables": [ - { - "name": "srcPtr_1", - "nodeType": "YulTypedName", - "src": "3904:8:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3952:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3963:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i_1", - "nodeType": "YulTypedName", - "src": "3956:3:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4038:221:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "4063:5:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "4080:8:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4074:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "4074:15:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4091:66:12", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4070:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4070:88:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4056:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4056:103:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4056:103:12" - }, - { - "nodeType": "YulAssignment", - "src": "4176:23:12", - "value": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "4189:5:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4196:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4185:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4185:14:12" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "4176:5:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4216:29:12", - "value": { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "4232:8:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4242:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4228:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4228:17:12" - }, - "variableNames": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "4216:8:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "3988:3:12" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "3993:8:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3985:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3985:17:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "4003:22:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4005:18:12", - "value": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "4016:3:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4021:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4012:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4012:11:12" - }, - "variableNames": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "4005:3:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "3981:3:12", - "statements": [] - }, - "src": "3977:282:12" - }, - { - "nodeType": "YulAssignment", - "src": "4272:15:12", - "value": { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "4282:5:12" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "4272:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4300:25:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "4314:6:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4322:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4310:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4310:15:12" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "4300:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4338:19:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4349:3:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4354:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4345:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4345:12:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4338:3:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2945:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2948:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2942:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "2942:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2956:18:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2958:14:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2967:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2970:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2963:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2963:9:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2958:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2938:3:12", - "statements": [] - }, - "src": "2934:1433:12" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4395:6:12" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4407:9:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4418:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4403:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4403:18:12" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "4376:18:12" - }, - "nodeType": "YulFunctionCall", - "src": "4376:46:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4376:46:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4442:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4453:4:12", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4438:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4438:20:12" - }, - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "4464:6:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4472:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4460:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4460:22:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4431:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4431:52:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4431:52:12" - }, - { - "nodeType": "YulAssignment", - "src": "4492:40:12", - "value": { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "4517:6:12" - }, - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "4525:6:12" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "4500:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "4500:32:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4492:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2494:9:12", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "2505:6:12", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2513:6:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2521:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2532:4:12", - "type": "" - } - ], - "src": "2266:2272:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4717:250:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4734:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4745:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4727:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4727:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4727:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4768:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4779:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4764:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4764:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4784:2:12", - "type": "", - "value": "60" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4757:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4757:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4757:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4807:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4818:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4803:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4803:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e6974206973206164647265737328", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4823:34:12", - "type": "", - "value": "LibDiamondCut: _init is address(" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4796:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4796:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4796:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4878:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4889:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4874:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4874:18:12" - }, - { - "hexValue": "3029206275745f63616c6c64617461206973206e6f7420656d707479", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4894:30:12", - "type": "", - "value": "0) but_calldata is not empty" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4867:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4867:58:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4867:58:12" - }, - { - "nodeType": "YulAssignment", - "src": "4934:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4946:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4957:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4942:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4942:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4934:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4694:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4708:4:12", - "type": "" - } - ], - "src": "4543:424:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5146:251:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5163:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5174:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5156:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5156:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5156:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5197:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5208:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5193:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5193:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5213:2:12", - "type": "", - "value": "61" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5186:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5186:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5186:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5236:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5247:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5232:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5232:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d7074", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5252:34:12", - "type": "", - "value": "LibDiamondCut: _calldata is empt" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5225:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5225:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5225:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5307:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5318:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5303:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5303:18:12" - }, - { - "hexValue": "7920627574205f696e6974206973206e6f742061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5323:31:12", - "type": "", - "value": "y but _init is not address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5296:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5296:59:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5296:59:12" - }, - { - "nodeType": "YulAssignment", - "src": "5364:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5376:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5387:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5372:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5372:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5364:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5123:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5137:4:12", - "type": "" - } - ], - "src": "4972:425:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5539:137:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "5549:27:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5569:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5563:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "5563:13:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "5553:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5611:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5619:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5607:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5607:17:12" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5626:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "5631:6:12" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "5585:21:12" - }, - "nodeType": "YulFunctionCall", - "src": "5585:53:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5585:53:12" - }, - { - "nodeType": "YulAssignment", - "src": "5647:23:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5658:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "5663:6:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5654:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5654:16:12" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "5647:3:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "5515:3:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5520:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "5531:3:12", - "type": "" - } - ], - "src": "5402:274:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5802:98:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5819:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5830:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5812:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5812:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5812:21:12" - }, - { - "nodeType": "YulAssignment", - "src": "5842:52:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5867:6:12" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5879:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5890:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5875:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5875:18:12" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "5850:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "5850:44:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5842:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5771:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5782:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5793:4:12", - "type": "" - } - ], - "src": "5681:219:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6079:228:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6096:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6107:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6089:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6089:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6089:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6130:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6141:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6126:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6126:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6146:2:12", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6119:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6119:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6119:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6169:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6180:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6165:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6165:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6185:34:12", - "type": "", - "value": "LibDiamondCut: _init function re" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6158:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6158:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6158:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6240:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6251:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6236:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6236:18:12" - }, - { - "hexValue": "766572746564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6256:8:12", - "type": "", - "value": "verted" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6229:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6229:36:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6229:36:12" - }, - { - "nodeType": "YulAssignment", - "src": "6274:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6286:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6297:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6282:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6282:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6274:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6056:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6070:4:12", - "type": "" - } - ], - "src": "5905:402:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6486:233:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6503:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6514:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6496:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6496:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6496:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6537:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6548:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6533:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6533:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6553:2:12", - "type": "", - "value": "43" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6526:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6526:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6526:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6576:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6587:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6572:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6572:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6592:34:12", - "type": "", - "value": "LibDiamondCut: No selectors in f" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6565:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6565:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6565:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6647:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6658:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6643:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6643:18:12" - }, - { - "hexValue": "6163657420746f20637574", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6663:13:12", - "type": "", - "value": "acet to cut" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6636:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6636:41:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6636:41:12" - }, - { - "nodeType": "YulAssignment", - "src": "6686:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6698:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6709:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6694:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6694:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6686:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6463:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6477:4:12", - "type": "" - } - ], - "src": "6312:407:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6898:234:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6915:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6926:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6908:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6908:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6908:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6949:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6960:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6945:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6945:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6965:2:12", - "type": "", - "value": "44" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6938:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6938:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6938:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6988:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6999:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6984:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6984:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204164642066616365742063616e27742062", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7004:34:12", - "type": "", - "value": "LibDiamondCut: Add facet can't b" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6977:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6977:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6977:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7059:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7070:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7055:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7055:18:12" - }, - { - "hexValue": "652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7075:14:12", - "type": "", - "value": "e address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7048:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7048:42:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7048:42:12" - }, - { - "nodeType": "YulAssignment", - "src": "7099:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7111:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7122:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7107:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7107:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7099:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6875:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6889:4:12", - "type": "" - } - ], - "src": "6724:408:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7311:243:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7328:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7339:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7321:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7321:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7321:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7362:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7373:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7358:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7358:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7378:2:12", - "type": "", - "value": "53" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7351:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7351:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7351:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7401:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7412:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7397:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7397:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7417:34:12", - "type": "", - "value": "LibDiamondCut: Can't add functio" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7390:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7390:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7390:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7472:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7483:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7468:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7468:18:12" - }, - { - "hexValue": "6e207468617420616c726561647920657869737473", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7488:23:12", - "type": "", - "value": "n that already exists" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7461:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7461:51:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7461:51:12" - }, - { - "nodeType": "YulAssignment", - "src": "7521:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7533:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7544:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7529:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7529:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7521:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7288:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7302:4:12", - "type": "" - } - ], - "src": "7137:417:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7605:171:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7615:36:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7625:26:12", - "type": "", - "value": "0xffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "7619:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7660:29:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7679:5:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7686:2:12" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7675:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7675:14:12" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "7664:7:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7717:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "7719:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "7719:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7719:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "7704:7:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7713:2:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "7701:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "7701:15:12" - }, - "nodeType": "YulIf", - "src": "7698:41:12" - }, - { - "nodeType": "YulAssignment", - "src": "7748:22:12", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "7759:7:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7768:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7755:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7755:15:12" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "7748:3:12" - } - ] - } - ] - }, - "name": "increment_t_uint96", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7587:5:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "7597:3:12", - "type": "" - } - ], - "src": "7559:217:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7955:246:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7972:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7983:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7965:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7965:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7965:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8006:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8017:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8002:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8002:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8022:2:12", - "type": "", - "value": "56" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7995:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7995:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7995:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8045:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8056:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8041:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8041:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8061:34:12", - "type": "", - "value": "LibDiamondCut: Can't replace fun" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8034:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8034:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8034:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8116:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8127:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8112:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8112:18:12" - }, - { - "hexValue": "6374696f6e20776974682073616d652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8132:26:12", - "type": "", - "value": "ction with same function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8105:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8105:54:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8105:54:12" - }, - { - "nodeType": "YulAssignment", - "src": "8168:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8180:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8191:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8176:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8176:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "8168:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7932:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7946:4:12", - "type": "" - } - ], - "src": "7781:420:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8380:244:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8397:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8408:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8390:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8390:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8390:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8431:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8442:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8427:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8427:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8447:2:12", - "type": "", - "value": "54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8420:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8420:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8420:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8470:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8481:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8466:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8466:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8486:34:12", - "type": "", - "value": "LibDiamondCut: Remove facet addr" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8459:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8459:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8459:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8541:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8552:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8537:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8537:18:12" - }, - { - "hexValue": "657373206d7573742062652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8557:24:12", - "type": "", - "value": "ess must be address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8530:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8530:52:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8530:52:12" - }, - { - "nodeType": "YulAssignment", - "src": "8591:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8603:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8614:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8599:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8599:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "8591:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8357:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "8371:4:12", - "type": "" - } - ], - "src": "8206:418:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8803:245:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8820:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8831:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8813:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8813:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8813:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8854:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8865:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8850:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8850:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8870:2:12", - "type": "", - "value": "55" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8843:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8843:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8843:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8893:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8904:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8889:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8889:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e63", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8909:34:12", - "type": "", - "value": "LibDiamondCut: Can't remove func" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8882:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8882:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8882:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8964:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8975:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8960:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8960:18:12" - }, - { - "hexValue": "74696f6e207468617420646f65736e2774206578697374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8980:25:12", - "type": "", - "value": "tion that doesn't exist" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8953:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8953:53:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8953:53:12" - }, - { - "nodeType": "YulAssignment", - "src": "9015:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9027:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9038:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9023:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9023:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9015:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8780:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "8794:4:12", - "type": "" - } - ], - "src": "8629:419:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9227:236:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9244:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9255:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9237:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9237:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9237:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9278:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9289:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9274:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9274:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9294:2:12", - "type": "", - "value": "46" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9267:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9267:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9267:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9317:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9328:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9313:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9313:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d75", - "kind": "string", - "nodeType": "YulLiteral", - "src": "9333:34:12", - "type": "", - "value": "LibDiamondCut: Can't remove immu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9306:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9306:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9306:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9388:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9399:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9384:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9384:18:12" - }, - { - "hexValue": "7461626c652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "9404:16:12", - "type": "", - "value": "table function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9377:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9377:44:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9377:44:12" - }, - { - "nodeType": "YulAssignment", - "src": "9430:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9442:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9453:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9438:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9438:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9430:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9204:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "9218:4:12", - "type": "" - } - ], - "src": "9053:410:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9517:76:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "9539:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "9541:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "9541:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9541:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "9533:1:12" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "9536:1:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "9530:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "9530:8:12" - }, - "nodeType": "YulIf", - "src": "9527:34:12" - }, - { - "nodeType": "YulAssignment", - "src": "9570:17:12", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "9582:1:12" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "9585:1:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9578:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9578:9:12" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "9570:4:12" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "9499:1:12", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "9502:1:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "9508:4:12", - "type": "" - } - ], - "src": "9468:125:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9630:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9647:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9650:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9640:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9640:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9640:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9744:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9747:4:12", - "type": "", - "value": "0x31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9737:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9737:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9737:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9768:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9771:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "9761:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9761:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9761:15:12" - } - ] - }, - "name": "panic_error_0x31", - "nodeType": "YulFunctionDefinition", - "src": "9598:184:12" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_stringliteral_6e6486aeb9db70da259b7171a739046119facaec2d8a6bd46f1145fe8391014a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Diamond: Function does not exist\")\n tail := add(headStart, 96)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function panic_error_0x21()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 39)\n mstore(add(headStart, 64), \"LibDiamondCut: Incorrect FacetCu\")\n mstore(add(headStart, 96), \"tAction\")\n tail := add(headStart, 128)\n }\n function panic_error_0x11()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function abi_encode_address(value, pos)\n {\n mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n }\n function abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n let _1 := 96\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 128\n pos := add(headStart, _2)\n let tail_2 := add(add(headStart, shl(5, length)), _2)\n let _3 := 0x20\n let srcPtr := add(value0, _3)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80))\n let _4 := mload(srcPtr)\n let tail_3 := add(tail_2, _1)\n mstore(tail_2, and(mload(_4), 0xffffffffffffffffffffffffffffffffffffffff))\n let memberValue0 := mload(add(_4, _3))\n if iszero(lt(memberValue0, 3))\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n mstore(add(tail_2, _3), memberValue0)\n let _5 := 0x40\n let memberValue0_1 := mload(add(_4, _5))\n mstore(add(tail_2, _5), _1)\n let pos_1 := tail_3\n let length_1 := mload(memberValue0_1)\n mstore(tail_3, length_1)\n pos_1 := add(tail_2, _2)\n let srcPtr_1 := add(memberValue0_1, _3)\n let i_1 := 0\n for { } lt(i_1, length_1) { i_1 := add(i_1, 1) }\n {\n mstore(pos_1, and(mload(srcPtr_1), 0xffffffff00000000000000000000000000000000000000000000000000000000))\n pos_1 := add(pos_1, _3)\n srcPtr_1 := add(srcPtr_1, _3)\n }\n tail_2 := pos_1\n srcPtr := add(srcPtr, _3)\n pos := add(pos, _3)\n }\n abi_encode_address(value1, add(headStart, _3))\n mstore(add(headStart, 0x40), sub(tail_2, headStart))\n tail := abi_encode_bytes(value2, tail_2)\n }\n function abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 60)\n mstore(add(headStart, 64), \"LibDiamondCut: _init is address(\")\n mstore(add(headStart, 96), \"0) but_calldata is not empty\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 61)\n mstore(add(headStart, 64), \"LibDiamondCut: _calldata is empt\")\n mstore(add(headStart, 96), \"y but _init is not address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"LibDiamondCut: _init function re\")\n mstore(add(headStart, 96), \"verted\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 43)\n mstore(add(headStart, 64), \"LibDiamondCut: No selectors in f\")\n mstore(add(headStart, 96), \"acet to cut\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"LibDiamondCut: Add facet can't b\")\n mstore(add(headStart, 96), \"e address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 53)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't add functio\")\n mstore(add(headStart, 96), \"n that already exists\")\n tail := add(headStart, 128)\n }\n function increment_t_uint96(value) -> ret\n {\n let _1 := 0xffffffffffffffffffffffff\n let value_1 := and(value, _1)\n if eq(value_1, _1) { panic_error_0x11() }\n ret := add(value_1, 1)\n }\n function abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 56)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't replace fun\")\n mstore(add(headStart, 96), \"ction with same function\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 54)\n mstore(add(headStart, 64), \"LibDiamondCut: Remove facet addr\")\n mstore(add(headStart, 96), \"ess must be address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 55)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove func\")\n mstore(add(headStart, 96), \"tion that doesn't exist\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 46)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove immu\")\n mstore(add(headStart, 96), \"table function\")\n tail := add(headStart, 128)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y) { panic_error_0x11() }\n diff := sub(x, y)\n }\n function panic_error_0x31()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x31)\n revert(0, 0x24)\n }\n}", - "id": 12, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0xB JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xE3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4469616D6F6E643A2046756E6374696F6E20646F6573206E6F74206578697374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x102 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E1 JUMPI PUSH2 0x1E1 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x202 JUMPI PUSH2 0x202 PUSH2 0x1686 JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x214 JUMPI PUSH2 0x214 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x263 JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x22F JUMPI PUSH2 0x22F PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x24D JUMPI PUSH2 0x24D PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x6BE JUMP JUMPDEST PUSH2 0x3A7 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x277 JUMPI PUSH2 0x277 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x2C1 JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x292 JUMPI PUSH2 0x292 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2B0 JUMPI PUSH2 0x2B0 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xA71 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2D5 JUMPI PUSH2 0x2D5 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x31F JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2F0 JUMPI PUSH2 0x2F0 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x30E JUMPI PUSH2 0x30E PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xE2E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74416374696F6E00000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP DUP1 PUSH2 0x3B2 DUP2 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1C4 JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1793 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x400 DUP3 DUP3 PUSH2 0x405 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x4B3 JUMPI DUP1 MLOAD ISZERO PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x544 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x583 JUMPI PUSH2 0x583 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19A4 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x101B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x5AB SWAP2 SWAP1 PUSH2 0x18FB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x5E6 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5EB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x6B8 JUMPI DUP1 MLOAD ISZERO PUSH2 0x630 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xDA SWAP2 SWAP1 PUSH2 0x1917 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7665727465640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x74F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x813 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x858 JUMPI PUSH2 0x858 DUP3 DUP6 PUSH2 0x1056 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xA6A JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x878 JUMPI PUSH2 0x878 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x95D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E207468617420616C7265616479206578697374730000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xA52 DUP2 PUSH2 0x1931 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xA62 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x85B JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xBC6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xC0B JUMPI PUSH2 0xC0B DUP3 DUP6 PUSH2 0x1056 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xA6A JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC2B JUMPI PUSH2 0xC2B PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 EQ ISZERO PUSH2 0xD16 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH2 0xD21 DUP6 DUP3 DUP5 PUSH2 0x10E5 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xE16 DUP2 PUSH2 0x1931 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xE26 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC0E JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xEBF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO PUSH2 0xF84 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x657373206D757374206265206164647265737328302900000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x6B8 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xFA4 JUMPI PUSH2 0xFA4 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1006 DUP5 DUP3 DUP5 PUSH2 0x10E5 JUMP JUMPDEST POP POP DUP1 DUP1 PUSH2 0x1013 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xF87 JUMP JUMPDEST DUP2 EXTCODESIZE DUP2 DUP2 PUSH2 0x6B8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xDA SWAP2 SWAP1 PUSH2 0x1917 JUMP JUMPDEST PUSH2 0x1078 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19CC PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x101B JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x1188 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ ISZERO PUSH2 0x122E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7461626C652066756E6374696F6E000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP2 DIV PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 PUSH2 0x12B8 SWAP2 PUSH2 0x195D JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0x13FF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x12FA JUMPI PUSH2 0x12FA PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x1358 JUMPI PUSH2 0x1358 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x1435 JUMPI PUSH2 0x1435 PUSH2 0x1974 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE DUP1 PUSH2 0xA6A JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x14CA SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x195D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x15B8 JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1516 JUMPI PUSH2 0x1516 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1554 JUMPI PUSH2 0x1554 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0x15CB JUMPI PUSH2 0x15CB PUSH2 0x1974 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1716 JUMPI PUSH2 0x1716 PUSH2 0x16B5 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1738 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1720 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x6B8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1761 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x171D JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x18BE JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP11 DUP6 SUB ADD DUP7 MSTORE DUP2 MLOAD DUP9 DUP6 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP5 DUP3 ADD MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x1845 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x18A9 JUMPI DUP4 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x1867 JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x17BC JUMP JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x18ED DUP2 DUP10 PUSH2 0x1749 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x190D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x171D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x192A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1749 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x1953 JUMPI PUSH2 0x1953 PUSH2 0x16B5 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x196F JUMPI PUSH2 0x196F PUSH2 0x16B5 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2646970 PUSH7 0x73582212202B18 0xA5 CALLER 0xB0 CALLDATACOPY SUB 0xE1 ORIGIN PUSH1 0x0 0xCF 0x2F CALLDATASIZE 0xB1 0xC6 0xEC PUSH4 0x1CFF163A PUSH22 0x2D939E5EE79AD2CDE364736F6C634300080A00330000 ", - "sourceMap": "509:2322:0:-:0;;;;;;;;1709:36;2001:7;;;;1971:38;;492:45:11;1971:38:0;;;;;;;;:51;492:45:11;;1971:51:0;;;2032:64;;;;;;;216:2:12;2032:64:0;;;198:21:12;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;2032:64:0;;;;;;;;;2293:14;2290:1;2287;2274:34;2437:1;2434;2418:14;2415:1;2408:5;2401;2388:51;2509:16;2506:1;2503;2488:38;2613:6;2632:66;;;;2747:16;2744:1;2737:27;2632:66;2667:16;2664:1;2657:27;1851:264:11;1993:16;;;2019:28;;;1993:16;2019:28;;;;;;;;;2062:46;;492:45;;1993:16;;;;;;2062:46;;1915:25;;2062:46;1905:210;;1851:264;:::o;2563:1067::-;2719:18;2714:806;2752:11;:18;2739:10;:31;2714:806;;;2800:33;2836:11;2848:10;2836:23;;;;;;;;:::i;:::-;;;;;;;:30;;;2800:66;;2894:30;2884:40;;;;;;;;:::i;:::-;:6;:40;;;;;;;;:::i;:::-;;2880:630;;;2944:93;2957:11;2969:10;2957:23;;;;;;;;:::i;:::-;;;;;;;:36;;;2995:11;3007:10;2995:23;;;;;;;;:::i;:::-;;;;;;;:41;;;2944:12;:93::i;:::-;2880:630;;;3072:34;3062:6;:44;;;;;;;;:::i;:::-;;3058:452;;;3126:97;3143:11;3155:10;3143:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3181:11;3193:10;3181:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3126:16;:97::i;3058:452::-;3258:33;3248:6;:43;;;;;;;;:::i;:::-;;3244:266;;;3311:96;3327:11;3339:10;3327:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3365:11;3377:10;3365:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3311:15;:96::i;3244:266::-;3446:49;;;;;955:2:12;3446:49:11;;;937:21:12;994:2;974:18;;;967:30;1033:34;1013:18;;;1006:62;1104:9;1084:18;;;1077:37;1131:19;;3446:49:11;753:403:12;3244:266:11;-1:-1:-1;2772:12:11;;;;:::i;:::-;;;;2714:806;;;;3534:41;3545:11;3558:5;3565:9;3534:41;;;;;;;;:::i;:::-;;;;;;;;3585:38;3606:5;3613:9;3585:20;:38::i;:::-;2563:1067;;;:::o;9541:871::-;9633:19;;;9629:777;;9676:16;;:21;9668:94;;;;;;;4745:2:12;9668:94:11;;;4727:21:12;4784:2;4764:18;;;4757:30;4823:34;4803:18;;;4796:62;4894:30;4874:18;;;4867:58;4942:19;;9668:94:11;4543:424:12;9668:94:11;9541:871;;:::o;9629:777::-;9820:1;9801:9;:16;:20;9793:94;;;;;;;5174:2:12;9793:94:11;;;5156:21:12;5213:2;5193:18;;;5186:30;5252:34;5232:18;;;5225:62;5323:31;5303:18;;;5296:59;5372:19;;9793:94:11;4972:425:12;9793:94:11;9905:22;;;9922:4;9905:22;9901:134;;9947:73;9970:5;9947:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;10049:12;10063:18;10085:5;:18;;10104:9;10085:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10048:66;;;;10133:7;10128:268;;10164:12;;:16;10160:222;;10261:5;10247:21;;;;;;;;;;;:::i;10160:222::-;10315:48;;;;;6107:2:12;10315:48:11;;;6089:21:12;6146:2;6126:18;;;6119:30;6185:34;6165:18;;;6158:62;6256:8;6236:18;;;6229:36;6282:19;;10315:48:11;5905:402:12;10160:222:11;9779:627;;9541:871;;:::o;3636:1089::-;3772:1;3744:18;:25;:29;3736:85;;;;;;;6514:2:12;3736:85:11;;;6496:21:12;6553:2;6533:18;;;6526:30;6592:34;6572:18;;;6565:62;6663:13;6643:18;;;6636:41;6694:19;;3736:85:11;6312:407:12;3736:85:11;492:45;3901:27;;;3893:84;;;;;;;6926:2:12;3893:84:11;;;6908:21:12;6965:2;6945:18;;;6938:30;7004:34;6984:18;;;6977:62;7075:14;7055:18;;;7048:42;7107:19;;3893:84:11;6724:408:12;3893:84:11;4020:40;;;3987:23;4020:40;;;:25;;;:40;;;;;:65;4154:21;;;4150:91;;4191:27;4200:2;4204:13;4191:8;:27::i;:::-;4255:21;4250:469;4294:18;:25;4278:13;:41;4250:469;;;4352:15;4370:18;4389:13;4370:33;;;;;;;;:::i;:::-;;;;;;;;;;;;4443:39;;;4417:23;4443:39;;;;;;;;;;;:52;4370:33;;-1:-1:-1;4443:52:11;;4517:29;;4509:95;;;;;;;7339:2:12;4509:95:11;;;7321:21:12;7378:2;7358:18;;;7351:30;7417:34;7397:18;;;7390:62;7488:23;7468:18;;;7461:51;7529:19;;4509:95:11;7137:417:12;4509:95:11;7084:40;;;:29;:40;;;;;;;;;;;:85;;;;;;;;;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;7084:85;7263:69;;;;4690:18;;;;:::i;:::-;;;;4338:381;;4321:15;;;;;:::i;:::-;;;;4250:469;;;;3726:999;;3636:1089;;:::o;4731:1138::-;4871:1;4843:18;:25;:29;4835:85;;;;;;;6514:2:12;4835:85:11;;;6496:21:12;6553:2;6533:18;;;6526:30;6592:34;6572:18;;;6565:62;6663:13;6643:18;;;6636:41;6694:19;;4835:85:11;6312:407:12;4835:85:11;492:45;4992:27;;;4984:84;;;;;;;6926:2:12;4984:84:11;;;6908:21:12;6965:2;6945:18;;;6938:30;7004:34;6984:18;;;6977:62;7075:14;7055:18;;;7048:42;7107:19;;4984:84:11;6724:408:12;4984:84:11;5111:40;;;5078:23;5111:40;;;:25;;;:40;;;;;:65;5245:21;;;5241:79;;5282:27;5291:2;5295:13;5282:8;:27::i;:::-;5334:21;5329:534;5373:18;:25;5357:13;:41;5329:534;;;5431:15;5449:18;5468:13;5449:33;;;;;;;;:::i;:::-;;;;;;;;;;;;5522:39;;;5496:23;5522:39;;;;;;;;;;;:52;5449:33;;-1:-1:-1;5522:52:11;;;;;5596:32;;;;;5588:101;;;;;;;7983:2:12;5588:101:11;;;7965:21:12;8022:2;8002:18;;;7995:30;8061:34;8041:18;;;8034:62;8132:26;8112:18;;;8105:54;8176:19;;5588:101:11;7781:420:12;5588:101:11;5703:45;5718:2;5722:15;5739:8;5703:14;:45::i;:::-;7084:40;;;:29;:40;;;;;;;;;;;:85;;;;;;;;;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;7084:85;7263:69;;;;5834:18;;;;:::i;:::-;;;;5417:446;;5400:15;;;;;:::i;:::-;;;;5329:534;;5875:742;6014:1;5986:18;:25;:29;5978:85;;;;;;;6514:2:12;5978:85:11;;;6496:21:12;6553:2;6533:18;;;6526:30;6592:34;6572:18;;;6565:62;6663:13;6643:18;;;6636:41;6694:19;;5978:85:11;6312:407:12;5978:85:11;492:45;6200:27;;;;6192:94;;;;;;;8408:2:12;6192:94:11;;;8390:21:12;8447:2;8427:18;;;8420:30;8486:34;8466:18;;;8459:62;8557:24;8537:18;;;8530:52;8599:19;;6192:94:11;8206:418:12;6192:94:11;6301:21;6296:315;6340:18;:25;6324:13;:41;6296:315;;;6398:15;6416:18;6435:13;6416:33;;;;;;;;:::i;:::-;;;;;;;;;;;;6489:39;;;6463:23;6489:39;;;;;;;;;;;:52;6416:33;;-1:-1:-1;6489:52:11;;6555:45;6489:2;:52;6416:33;6555:14;:45::i;:::-;6384:227;;6367:15;;;;;:::i;:::-;;;;6296:315;;10418:261;10591:22;;10658:13;10640:16;10632:40;;;;;;;;;;;;;:::i;6623:316::-;6710:77;6733:13;6710:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;6861:17;;;:24;;6797:40;;;;;;;;:25;;;;:40;;;;;;;:61;;:88;;;6895:37;;;;;;;;;;;;;;;;;;;;;6623:316::o;7345:2190::-;7472:27;;;7464:95;;;;;;;8831:2:12;7464:95:11;;;8813:21:12;8870:2;8850:18;;;8843:30;8909:34;8889:18;;;8882:62;8980:25;8960:18;;;8953:53;9023:19;;7464:95:11;8629:419:12;7464:95:11;7654:30;;;7679:4;7654:30;;7646:89;;;;;;;9255:2:12;7646:89:11;;;9237:21:12;9294:2;9274:18;;;9267:30;9333:34;9313:18;;;9306:62;9404:16;9384:18;;;9377:44;9438:19;;7646:89:11;9053:410:12;7646:89:11;7846:40;;;7819:24;7846:40;;;;;;;;;;;:65;7952:40;;;;;8020:1;7952:25;;;:40;;;;;;:65;7846;;;;;;;7819:24;7952:69;;;:::i;:::-;7921:100;;8123:20;8103:16;:40;8099:387;;8181:40;;;8159:19;8181:40;;;:25;;;:40;;;;;:80;;8240:20;;8181:80;;;;;;:::i;:::-;;;;;;;;;;;;;;8275:40;;;;;:25;;;:40;;;;;;;:76;;8181:80;;;;;;;;;;;;;;-1:-1:-1;8181:80:11;;8275:40;8334:16;;8275:76;;;;;;:::i;:::-;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;8380:43;;;;;;;;;;;;;:95;;;;;;;;;;;;8099:387;8531:40;;;;;;;:25;;;:40;;;;;:64;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8612:40;;;;;;;;;;;8605:47;8747:25;8743:786;;8914:17;;;:24;8879:32;;8914:28;;8941:1;;8914:28;:::i;:::-;8987:40;;;8956:28;8987:40;;;:25;;;;:40;;;;;;:61;;8879:63;;-1:-1:-1;9066:48:11;;;9062:338;;9134:24;9161:2;:17;;9179:24;9161:43;;;;;;;;:::i;:::-;;;;;;;;;;;9222:17;;;:39;;9161:43;;;;;-1:-1:-1;9161:43:11;;9240:20;;9222:39;;;;;;:::i;:::-;;;;;;;;;;;;;:58;;;;;;;;;;;9298:43;;;;;;-1:-1:-1;9298:25:11;;;:43;;;;;;:64;:87;;;9062:338;9413:2;:17;;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;9457:40;;;;9413:23;9457:25;;;:40;;;;;;:61;9450:68;-1:-1:-1;;7446:2089:11;;7345:2190;;;:::o;375:184:12:-;427:77;424:1;417:88;524:4;521:1;514:15;548:4;545:1;538:15;564:184;616:77;613:1;606:88;713:4;710:1;703:15;737:4;734:1;727:15;1161:184;1213:77;1210:1;1203:88;1310:4;1307:1;1300:15;1334:4;1331:1;1324:15;1350:195;1389:3;1420:66;1413:5;1410:77;1407:103;;;1490:18;;:::i;:::-;-1:-1:-1;1537:1:12;1526:13;;1350:195::o;1682:258::-;1754:1;1764:113;1778:6;1775:1;1772:13;1764:113;;;1854:11;;;1848:18;1835:11;;;1828:39;1800:2;1793:10;1764:113;;;1895:6;1892:1;1889:13;1886:48;;;-1:-1:-1;;1930:1:12;1912:16;;1905:27;1682:258::o;1945:316::-;1986:3;2024:5;2018:12;2051:6;2046:3;2039:19;2067:63;2123:6;2116:4;2111:3;2107:14;2100:4;2093:5;2089:16;2067:63;:::i;:::-;2175:2;2163:15;2180:66;2159:88;2150:98;;;;2250:4;2146:109;;1945:316;-1:-1:-1;;1945:316:12:o;2266:2272::-;2532:4;2561:2;2601;2590:9;2586:18;2631:2;2620:9;2613:21;2654:6;2689;2683:13;2720:6;2712;2705:22;2746:3;2736:13;;2780:2;2769:9;2765:18;2758:25;;2842:2;2832:6;2829:1;2825:14;2814:9;2810:30;2806:39;2864:4;2903:2;2895:6;2891:15;2924:1;2934:1433;2948:6;2945:1;2942:13;2934:1433;;;3037:66;3025:9;3017:6;3013:22;3009:95;3004:3;2997:108;3134:6;3128:13;3180:2;3172:6;3168:15;3226:42;3221:2;3215:9;3211:58;3203:6;3196:74;3317:2;3313;3309:11;3303:18;3361:1;3347:12;3344:19;3334:227;;3405:77;3402:1;3395:88;3510:4;3507:1;3500:15;3542:4;3539:1;3532:15;3334:227;3581:15;;;3574:37;3634:4;3679:11;;;3673:18;3711:15;;;3704:27;;;3792:21;;3826:24;;;;3916:23;;;;-1:-1:-1;;3872:15:12;;;;3977:282;3993:8;3988:3;3985:17;3977:282;;;4074:15;;4091:66;4070:88;4056:103;;4228:17;;;;4021:1;4012:11;;;;;4185:14;;;;3977:282;;;-1:-1:-1;4345:12:12;;;;4282:5;-1:-1:-1;;;4310:15:12;;;;2970:1;2963:9;2934:1433;;;-1:-1:-1;;1627:42:12;1616:54;;4403:18;;;1604:67;4460:22;;;4453:4;4438:20;;4431:52;4500:32;4464:6;4517;4500:32;:::i;:::-;4492:40;2266:2272;-1:-1:-1;;;;;;;;;;2266:2272:12:o;5402:274::-;5531:3;5569:6;5563:13;5585:53;5631:6;5626:3;5619:4;5611:6;5607:17;5585:53;:::i;:::-;5654:16;;;;;5402:274;-1:-1:-1;;5402:274:12:o;5681:219::-;5830:2;5819:9;5812:21;5793:4;5850:44;5890:2;5879:9;5875:18;5867:6;5850:44;:::i;:::-;5842:52;5681:219;-1:-1:-1;;;5681:219:12:o;7559:217::-;7597:3;7625:26;7686:2;7679:5;7675:14;7713:2;7704:7;7701:15;7698:41;;;7719:18;;:::i;:::-;7768:1;7755:15;;7559:217;-1:-1:-1;;;7559:217:12:o;9468:125::-;9508:4;9536:1;9533;9530:8;9527:34;;;9541:18;;:::i;:::-;-1:-1:-1;9578:9:12;;9468:125::o;9598:184::-;9650:77;9647:1;9640:88;9747:4;9744:1;9737:15;9771:4;9768:1;9761:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "1338600", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contractOwner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"initContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct Diamond.Initialization[]\",\"name\":\"_initializations\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_contractOwner\":\"the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\",\"_diamondCut\":\"the list of facet to add\",\"_initializations\":\"the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"This construct a diamond contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/Diamond.sol\":\"Diamond\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/Diamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\",\"keccak256\":\"0x9f459a9f18d5429b0dd40e60b4a67a27d2b94693c4d190ed9dd7034a894c1eb6\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "constructor": { - "notice": "This construct a diamond contract" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9" -} diff --git a/extendedArtifacts/DiamondCutFacet.json b/extendedArtifacts/DiamondCutFacet.json deleted file mode 100644 index 53fe4ad..0000000 --- a/extendedArtifacts/DiamondCutFacet.json +++ /dev/null @@ -1,10077 +0,0 @@ -{ - "contractName": "DiamondCutFacet", - "sourceName": "solc_0.8/diamond/facets/DiamondCutFacet.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50611d16806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631f931c1c14610030575b600080fd5b61004361003e36600461166f565b610045565b005b61004d61009e565b61009761005a85876117ec565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061016e92505050565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6004015473ffffffffffffffffffffffffffffffffffffffff16331461016c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b565b60005b835181101561036757600084828151811061018e5761018e611948565b6020026020010151602001519050600060028111156101af576101af611977565b8160028111156101c1576101c1611977565b14156102105761020b8583815181106101dc576101dc611948565b6020026020010151600001518684815181106101fa576101fa611948565b6020026020010151604001516103b2565b610354565b600181600281111561022457610224611977565b141561026e5761020b85838151811061023f5761023f611948565b60200260200101516000015186848151811061025d5761025d611948565b60200260200101516040015161075e565b600281600281111561028257610282611977565b14156102cc5761020b85838151811061029d5761029d611948565b6020026020010151600001518684815181106102bb576102bb611948565b602002602001015160400151610b1b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e000000000000000000000000000000000000000000000000006064820152608401610163565b508061035f816119d5565b915050610171565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161039b93929190611a84565b60405180910390a16103ad8282610d0e565b505050565b6000815111610443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f65206164647265737328302900000000000000000000000000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff811661054c5761054c8285610fc1565b60005b835181101561009757600084828151811061056c5761056c611948565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff168015610651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c72656164792065786973747300000000000000000000006064820152608401610163565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff0000000000000000000000000000000000000000161790558361074681611bec565b94505050508080610756906119d5565b91505061054f565b60008151116107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166108b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f65206164647265737328302900000000000000000000000000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff81166108f8576108f88285610fc1565b60005b835181101561009757600084828151811061091857610918611948565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610a03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401610163565b610a0e858284611050565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610b0381611bec565b94505050508080610b13906119d5565b9150506108fb565b6000815111610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d7573742062652061646472657373283029000000000000000000006064820152608401610163565b60005b8251811015610d08576000838281518110610c9157610c91611948565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610cf3848284611050565b50508080610d00906119d5565b915050610c74565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610dbc57805115610db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d707479000000006064820152608401610163565b5050565b6000815111610e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f7420616464726573732830290000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff82163014610e8c57610e8c82604051806060016040528060288152602001611c95602891396115c2565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610eb49190611c18565b600060405180830381855af49150503d8060008114610eef576040519150601f19603f3d011682016040523d82523d6000602084013e610ef4565b606091505b509150915081610d0857805115610f3957806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101639190611c34565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560448201527f76657274656400000000000000000000000000000000000000000000000000006064820152608401610163565b610fe381604051806060016040528060248152602001611cbd602491396115c2565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff82166110f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff8216301415611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e0000000000000000000000000000000000006064820152608401610163565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff16929161122391611c4e565b905080821461136a5773ffffffffffffffffffffffffffffffffffffffff84166000908152600186016020526040812080548390811061126557611265611948565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106112c3576112c3611948565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff8416600090815260018601602052604090208054806113a0576113a0611c65565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff000000000000000000000000000000000000000000000000000000008516825286905260408120558061009757600285015460009061143590600190611c4e565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260018089016020526040909120015490915080821461152357600087600201838154811061148157611481611948565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff90921692508291849081106114bf576114bf611948565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b8660020180548061153657611536611c65565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b813b8181610d08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101639190611c34565b803573ffffffffffffffffffffffffffffffffffffffff8116811461162157600080fd5b919050565b60008083601f84011261163857600080fd5b50813567ffffffffffffffff81111561165057600080fd5b60208301915083602082850101111561166857600080fd5b9250929050565b60008060008060006060868803121561168757600080fd5b853567ffffffffffffffff8082111561169f57600080fd5b818801915088601f8301126116b357600080fd5b8135818111156116c257600080fd5b8960208260051b85010111156116d757600080fd5b602083019750809650506116ed602089016115fd565b9450604088013591508082111561170357600080fd5b5061171088828901611626565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561177357611773611721565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c0576117c0611721565b604052919050565b600067ffffffffffffffff8211156117e2576117e2611721565b5060051b60200190565b60006117ff6117fa846117c8565b611779565b83815260208082019190600586811b86013681111561181d57600080fd5b865b8181101561193b57803567ffffffffffffffff808211156118405760008081fd5b818a019150606082360312156118565760008081fd5b61185e611750565b611867836115fd565b8152868301356003811061187b5760008081fd5b81880152604083810135838111156118935760008081fd5b939093019236601f8501126118aa57600092508283fd5b833592506118ba6117fa846117c8565b83815292871b840188019288810190368511156118d75760008081fd5b948901945b848610156119245785357fffffffff00000000000000000000000000000000000000000000000000000000811681146119155760008081fd5b825294890194908901906118dc565b91830191909152508852505094830194830161181f565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611a0757611a076119a6565b5060010190565b60005b83811015611a29578181015183820152602001611a11565b83811115610d085750506000910152565b60008151808452611a52816020860160208601611a0e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611baf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611b36577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015611b9a5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611b58565b50978501979550505090820190600101611aad565b505073ffffffffffffffffffffffffffffffffffffffff8a16908801528681036040880152611bde8189611a3a565b9a9950505050505050505050565b60006bffffffffffffffffffffffff80831681811415611c0e57611c0e6119a6565b6001019392505050565b60008251611c2a818460208701611a0e565b9190910192915050565b602081526000611c476020830184611a3a565b9392505050565b600082821015611c6057611c606119a6565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212205ebb55271a7b4137fff1fdb3061128fbde1889b068f341304476640c9c0371cf64736f6c634300080a0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80631f931c1c14610030575b600080fd5b61004361003e36600461166f565b610045565b005b61004d61009e565b61009761005a85876117ec565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061016e92505050565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6004015473ffffffffffffffffffffffffffffffffffffffff16331461016c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b565b60005b835181101561036757600084828151811061018e5761018e611948565b6020026020010151602001519050600060028111156101af576101af611977565b8160028111156101c1576101c1611977565b14156102105761020b8583815181106101dc576101dc611948565b6020026020010151600001518684815181106101fa576101fa611948565b6020026020010151604001516103b2565b610354565b600181600281111561022457610224611977565b141561026e5761020b85838151811061023f5761023f611948565b60200260200101516000015186848151811061025d5761025d611948565b60200260200101516040015161075e565b600281600281111561028257610282611977565b14156102cc5761020b85838151811061029d5761029d611948565b6020026020010151600001518684815181106102bb576102bb611948565b602002602001015160400151610b1b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e000000000000000000000000000000000000000000000000006064820152608401610163565b508061035f816119d5565b915050610171565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161039b93929190611a84565b60405180910390a16103ad8282610d0e565b505050565b6000815111610443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f65206164647265737328302900000000000000000000000000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff811661054c5761054c8285610fc1565b60005b835181101561009757600084828151811061056c5761056c611948565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff168015610651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c72656164792065786973747300000000000000000000006064820152608401610163565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff0000000000000000000000000000000000000000161790558361074681611bec565b94505050508080610756906119d5565b91505061054f565b60008151116107ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166108b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f65206164647265737328302900000000000000000000000000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff81166108f8576108f88285610fc1565b60005b835181101561009757600084828151811061091857610918611948565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610a03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401610163565b610a0e858284611050565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610b0381611bec565b94505050508080610b13906119d5565b9150506108fb565b6000815111610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f206375740000000000000000000000000000000000000000006064820152608401610163565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d7573742062652061646472657373283029000000000000000000006064820152608401610163565b60005b8251811015610d08576000838281518110610c9157610c91611948565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610cf3848284611050565b50508080610d00906119d5565b915050610c74565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610dbc57805115610db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d707479000000006064820152608401610163565b5050565b6000815111610e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f7420616464726573732830290000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff82163014610e8c57610e8c82604051806060016040528060288152602001611c95602891396115c2565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610eb49190611c18565b600060405180830381855af49150503d8060008114610eef576040519150601f19603f3d011682016040523d82523d6000602084013e610ef4565b606091505b509150915081610d0857805115610f3957806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101639190611c34565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560448201527f76657274656400000000000000000000000000000000000000000000000000006064820152608401610163565b610fe381604051806060016040528060248152602001611cbd602491396115c2565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff82166110f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401610163565b73ffffffffffffffffffffffffffffffffffffffff8216301415611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e0000000000000000000000000000000000006064820152608401610163565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff16929161122391611c4e565b905080821461136a5773ffffffffffffffffffffffffffffffffffffffff84166000908152600186016020526040812080548390811061126557611265611948565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106112c3576112c3611948565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff8416600090815260018601602052604090208054806113a0576113a0611c65565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff000000000000000000000000000000000000000000000000000000008516825286905260408120558061009757600285015460009061143590600190611c4e565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260018089016020526040909120015490915080821461152357600087600201838154811061148157611481611948565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff90921692508291849081106114bf576114bf611948565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b8660020180548061153657611536611c65565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b813b8181610d08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101639190611c34565b803573ffffffffffffffffffffffffffffffffffffffff8116811461162157600080fd5b919050565b60008083601f84011261163857600080fd5b50813567ffffffffffffffff81111561165057600080fd5b60208301915083602082850101111561166857600080fd5b9250929050565b60008060008060006060868803121561168757600080fd5b853567ffffffffffffffff8082111561169f57600080fd5b818801915088601f8301126116b357600080fd5b8135818111156116c257600080fd5b8960208260051b85010111156116d757600080fd5b602083019750809650506116ed602089016115fd565b9450604088013591508082111561170357600080fd5b5061171088828901611626565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561177357611773611721565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117c0576117c0611721565b604052919050565b600067ffffffffffffffff8211156117e2576117e2611721565b5060051b60200190565b60006117ff6117fa846117c8565b611779565b83815260208082019190600586811b86013681111561181d57600080fd5b865b8181101561193b57803567ffffffffffffffff808211156118405760008081fd5b818a019150606082360312156118565760008081fd5b61185e611750565b611867836115fd565b8152868301356003811061187b5760008081fd5b81880152604083810135838111156118935760008081fd5b939093019236601f8501126118aa57600092508283fd5b833592506118ba6117fa846117c8565b83815292871b840188019288810190368511156118d75760008081fd5b948901945b848610156119245785357fffffffff00000000000000000000000000000000000000000000000000000000811681146119155760008081fd5b825294890194908901906118dc565b91830191909152508852505094830194830161181f565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611a0757611a076119a6565b5060010190565b60005b83811015611a29578181015183820152602001611a11565b83811115610d085750506000910152565b60008151808452611a52816020860160208601611a0e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611baf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611b36577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015611b9a5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611b58565b50978501979550505090820190600101611aad565b505073ffffffffffffffffffffffffffffffffffffffff8a16908801528681036040880152611bde8189611a3a565b9a9950505050505050505050565b60006bffffffffffffffffffffffff80831681811415611c0e57611c0e6119a6565b6001019392505050565b60008251611c2a818460208701611a0e565b9190910192915050565b602081526000611c476020830184611a3a565b9392505050565b600082821015611c6057611c606119a6565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212205ebb55271a7b4137fff1fdb3061128fbde1889b068f341304476640c9c0371cf64736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": { - "params": { - "_calldata": "A function call, including function selector and arguments _calldata is executed with delegatecall on _init", - "_diamondCut": "Contains the facet addresses and function selectors", - "_init": "The address of the contract or facet to execute _calldata" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D16 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1F931C1C EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x166F JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x4D PUSH2 0x9E JUMP JUMPDEST PUSH2 0x97 PUSH2 0x5A DUP6 DUP8 PUSH2 0x17EC JUMP JUMPDEST DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x16E SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x16C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A204D75737420626520636F6E7472616374206F776E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6572000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x367 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x18E JUMPI PUSH2 0x18E PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1AF JUMPI PUSH2 0x1AF PUSH2 0x1977 JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C1 JUMPI PUSH2 0x1C1 PUSH2 0x1977 JUMP JUMPDEST EQ ISZERO PUSH2 0x210 JUMPI PUSH2 0x20B DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1DC JUMPI PUSH2 0x1DC PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1FA JUMPI PUSH2 0x1FA PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x354 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x224 JUMPI PUSH2 0x224 PUSH2 0x1977 JUMP JUMPDEST EQ ISZERO PUSH2 0x26E JUMPI PUSH2 0x20B DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x23F JUMPI PUSH2 0x23F PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x25D JUMPI PUSH2 0x25D PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x75E JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x282 JUMPI PUSH2 0x282 PUSH2 0x1977 JUMP JUMPDEST EQ ISZERO PUSH2 0x2CC JUMPI PUSH2 0x20B DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x29D JUMPI PUSH2 0x29D PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2BB JUMPI PUSH2 0x2BB PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xB1B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74416374696F6E00000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST POP DUP1 PUSH2 0x35F DUP2 PUSH2 0x19D5 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x171 JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x39B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1A84 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x3AD DUP3 DUP3 PUSH2 0xD0E JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x443 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x507 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x54C JUMPI PUSH2 0x54C DUP3 DUP6 PUSH2 0xFC1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x97 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x56C JUMPI PUSH2 0x56C PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x651 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E207468617420616C7265616479206578697374730000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0x746 DUP2 PUSH2 0x1BEC JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0x756 SWAP1 PUSH2 0x19D5 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x54F JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x7EF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x8B3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x8F8 JUMPI PUSH2 0x8F8 DUP3 DUP6 PUSH2 0xFC1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x97 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x918 JUMPI PUSH2 0x918 PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 EQ ISZERO PUSH2 0xA03 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH2 0xA0E DUP6 DUP3 DUP5 PUSH2 0x1050 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xB03 DUP2 PUSH2 0x1BEC JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xB13 SWAP1 PUSH2 0x19D5 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x8FB JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xBAC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO PUSH2 0xC71 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x657373206D757374206265206164647265737328302900000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xD08 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC91 JUMPI PUSH2 0xC91 PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xCF3 DUP5 DUP3 DUP5 PUSH2 0x1050 JUMP JUMPDEST POP POP DUP1 DUP1 PUSH2 0xD00 SWAP1 PUSH2 0x19D5 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC74 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xDBC JUMPI DUP1 MLOAD ISZERO PUSH2 0xDB8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xE4D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0xE8C JUMPI PUSH2 0xE8C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C95 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x15C2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xEB4 SWAP2 SWAP1 PUSH2 0x1C18 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xEEF JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xEF4 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0xD08 JUMPI DUP1 MLOAD ISZERO PUSH2 0xF39 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x163 SWAP2 SWAP1 PUSH2 0x1C34 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7665727465640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH2 0xFE3 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CBD PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x15C2 JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x10F3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ ISZERO PUSH2 0x1199 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7461626C652066756E6374696F6E000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP2 DIV PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 PUSH2 0x1223 SWAP2 PUSH2 0x1C4E JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0x136A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x1265 JUMPI PUSH2 0x1265 PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x12C3 JUMPI PUSH2 0x12C3 PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x13A0 JUMPI PUSH2 0x13A0 PUSH2 0x1C65 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE DUP1 PUSH2 0x97 JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1435 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x1C4E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x1523 JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1481 JUMPI PUSH2 0x1481 PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x14BF JUMPI PUSH2 0x14BF PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0x1536 JUMPI PUSH2 0x1536 PUSH2 0x1C65 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 EXTCODESIZE DUP2 DUP2 PUSH2 0xD08 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x163 SWAP2 SWAP1 PUSH2 0x1C34 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1650 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1668 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1687 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x169F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x16B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x16C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x16D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP8 POP DUP1 SWAP7 POP POP PUSH2 0x16ED PUSH1 0x20 DUP10 ADD PUSH2 0x15FD JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1710 DUP9 DUP3 DUP10 ADD PUSH2 0x1626 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1773 JUMPI PUSH2 0x1773 PUSH2 0x1721 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x17C0 JUMPI PUSH2 0x17C0 PUSH2 0x1721 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x17E2 JUMPI PUSH2 0x17E2 PUSH2 0x1721 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17FF PUSH2 0x17FA DUP5 PUSH2 0x17C8 JUMP JUMPDEST PUSH2 0x1779 JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP2 SWAP1 PUSH1 0x5 DUP7 DUP2 SHL DUP7 ADD CALLDATASIZE DUP2 GT ISZERO PUSH2 0x181D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x193B JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1840 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP PUSH1 0x60 DUP3 CALLDATASIZE SUB SLT ISZERO PUSH2 0x1856 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x185E PUSH2 0x1750 JUMP JUMPDEST PUSH2 0x1867 DUP4 PUSH2 0x15FD JUMP JUMPDEST DUP2 MSTORE DUP7 DUP4 ADD CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x187B JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP9 ADD MSTORE PUSH1 0x40 DUP4 DUP2 ADD CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x1893 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP3 CALLDATASIZE PUSH1 0x1F DUP6 ADD SLT PUSH2 0x18AA JUMPI PUSH1 0x0 SWAP3 POP DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0x18BA PUSH2 0x17FA DUP5 PUSH2 0x17C8 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP3 DUP8 SHL DUP5 ADD DUP9 ADD SWAP3 DUP9 DUP2 ADD SWAP1 CALLDATASIZE DUP6 GT ISZERO PUSH2 0x18D7 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP5 DUP10 ADD SWAP5 JUMPDEST DUP5 DUP7 LT ISZERO PUSH2 0x1924 JUMPI DUP6 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x1915 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 MSTORE SWAP5 DUP10 ADD SWAP5 SWAP1 DUP10 ADD SWAP1 PUSH2 0x18DC JUMP JUMPDEST SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 MSTORE POP POP SWAP5 DUP4 ADD SWAP5 DUP4 ADD PUSH2 0x181F JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1A07 JUMPI PUSH2 0x1A07 PUSH2 0x19A6 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1A29 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A11 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD08 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1A52 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1A0E JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1BAF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP11 DUP6 SUB ADD DUP7 MSTORE DUP2 MLOAD DUP9 DUP6 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP5 DUP3 ADD MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x1B36 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x1B9A JUMPI DUP4 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x1B58 JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1AAD JUMP JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x1BDE DUP2 DUP10 PUSH2 0x1A3A JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x1C0E JUMPI PUSH2 0x1C0E PUSH2 0x19A6 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1C2A DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1A0E JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C47 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1A3A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1C60 JUMPI PUSH2 0x1C60 PUSH2 0x19A6 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2646970 PUSH7 0x73582212205EBB SSTORE 0x27 BYTE PUSH28 0x4137FFF1FDB3061128FBDE1889B068F341304476640C9C0371CF6473 PUSH16 0x6C634300080A00330000000000000000 ", - "sourceMap": "482:747:2:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@addFacet_1286": { - "entryPoint": 4033, - "id": 1286, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@addFunction_1327": { - "entryPoint": null, - "id": 1327, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@addFunctions_1084": { - "entryPoint": 946, - "id": 1084, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@diamondCut_178": { - "entryPoint": 69, - "id": 178, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@diamondCut_983": { - "entryPoint": 366, - "id": 983, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@enforceHasContractCode_1590": { - "entryPoint": 5570, - "id": 1590, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@enforceIsContractOwner_869": { - "entryPoint": 158, - "id": 869, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@initializeDiamondCut_1571": { - "entryPoint": 3342, - "id": 1571, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@removeFunction_1494": { - "entryPoint": 4176, - "id": 1494, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@removeFunctions_1253": { - "entryPoint": 2843, - "id": 1253, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@replaceFunctions_1188": { - "entryPoint": 1886, - "id": 1188, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 5629, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_bytes_calldata": { - "entryPoint": 5670, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptrt_addresst_bytes_calldata_ptr": { - "entryPoint": 5743, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_encode_address": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_bytes": { - "entryPoint": 6714, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 7192, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 6788, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 7220, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 6009, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory_2940": { - "entryPoint": 5968, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "array_allocation_size_array_struct_FacetCut_dyn": { - "entryPoint": 6088, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 7246, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "convert_array_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 6124, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 6670, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "increment_t_uint256": { - "entryPoint": 6613, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "increment_t_uint96": { - "entryPoint": 7148, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 6566, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x21": { - "entryPoint": 6519, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x31": { - "entryPoint": 7269, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 6472, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 5921, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:15149:12", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:12", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "63:147:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "73:29:12", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "95:6:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "82:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "82:20:12" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "73:5:12" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "188:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "197:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "200:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "190:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "190:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "190:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "124:5:12" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "135:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "142:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "131:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "131:54:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "121:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "121:65:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "114:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "114:73:12" - }, - "nodeType": "YulIf", - "src": "111:93:12" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "42:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:12", - "type": "" - } - ], - "src": "14:196:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "287:275:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "336:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "345:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "348:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "338:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "338:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "338:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "315:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "323:4:12", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "311:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "311:17:12" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "330:3:12" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "307:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "307:27:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "300:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "300:35:12" - }, - "nodeType": "YulIf", - "src": "297:55:12" - }, - { - "nodeType": "YulAssignment", - "src": "361:30:12", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "384:6:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "371:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "371:20:12" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "361:6:12" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "434:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "443:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "446:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "436:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "436:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "436:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "406:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "414:18:12", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "403:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "403:30:12" - }, - "nodeType": "YulIf", - "src": "400:50:12" - }, - { - "nodeType": "YulAssignment", - "src": "459:29:12", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "475:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "483:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "471:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "471:17:12" - }, - "variableNames": [ - { - "name": "arrayPos", - "nodeType": "YulIdentifier", - "src": "459:8:12" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "540:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "549:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "552:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "542:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "542:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "542:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "511:6:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "519:6:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "507:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "507:19:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "528:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "503:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "503:30:12" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "535:3:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "500:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "500:39:12" - }, - "nodeType": "YulIf", - "src": "497:59:12" - } - ] - }, - "name": "abi_decode_bytes_calldata", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "250:6:12", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "258:3:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "arrayPos", - "nodeType": "YulTypedName", - "src": "266:8:12", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "276:6:12", - "type": "" - } - ], - "src": "215:347:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "752:824:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "798:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "807:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "810:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "800:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "800:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "800:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "773:7:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "782:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "769:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "769:23:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "794:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "765:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "765:32:12" - }, - "nodeType": "YulIf", - "src": "762:52:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "823:37:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "850:9:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "837:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "837:23:12" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "827:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "869:28:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "879:18:12", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "873:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "924:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "933:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "936:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "926:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "926:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "926:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "912:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "920:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "909:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "909:14:12" - }, - "nodeType": "YulIf", - "src": "906:34:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "949:32:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "963:9:12" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "974:6:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "959:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "959:22:12" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "953:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1029:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1038:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1041:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1031:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1031:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1031:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1008:2:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1012:4:12", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1004:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1004:13:12" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1019:7:12" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1000:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1000:27:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "993:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "993:35:12" - }, - "nodeType": "YulIf", - "src": "990:55:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1054:30:12", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1081:2:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1068:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "1068:16:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1058:6:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1111:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1120:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1123:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1113:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1113:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1113:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1099:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1107:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1096:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1096:14:12" - }, - "nodeType": "YulIf", - "src": "1093:34:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1187:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1196:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1199:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1189:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1189:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1189:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1150:2:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1158:1:12", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1161:6:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1154:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1154:14:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1146:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1146:23:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1171:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1142:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1142:34:12" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1178:7:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1139:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1139:47:12" - }, - "nodeType": "YulIf", - "src": "1136:67:12" - }, - { - "nodeType": "YulAssignment", - "src": "1212:23:12", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1226:2:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1230:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1222:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1222:13:12" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1212:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1244:16:12", - "value": { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1254:6:12" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1244:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1269:50:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1302:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1313:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1298:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1298:20:12" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1279:18:12" - }, - "nodeType": "YulFunctionCall", - "src": "1279:40:12" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1269:6:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1328:48:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1361:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1372:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1357:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1357:18:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1344:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "1344:32:12" - }, - "variables": [ - { - "name": "offset_1", - "nodeType": "YulTypedName", - "src": "1332:8:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1405:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1414:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1417:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1407:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1407:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1407:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "1391:8:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1401:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1388:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1388:16:12" - }, - "nodeType": "YulIf", - "src": "1385:36:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1430:86:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1486:9:12" - }, - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "1497:8:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1482:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1482:24:12" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1508:7:12" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nodeType": "YulIdentifier", - "src": "1456:25:12" - }, - "nodeType": "YulFunctionCall", - "src": "1456:60:12" - }, - "variables": [ - { - "name": "value3_1", - "nodeType": "YulTypedName", - "src": "1434:8:12", - "type": "" - }, - { - "name": "value4_1", - "nodeType": "YulTypedName", - "src": "1444:8:12", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1525:18:12", - "value": { - "name": "value3_1", - "nodeType": "YulIdentifier", - "src": "1535:8:12" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "1525:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1552:18:12", - "value": { - "name": "value4_1", - "nodeType": "YulIdentifier", - "src": "1562:8:12" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "1552:6:12" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptrt_addresst_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "686:9:12", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "697:7:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "709:6:12", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "717:6:12", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "725:6:12", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "733:6:12", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "741:6:12", - "type": "" - } - ], - "src": "567:1009:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1613:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1630:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1633:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1623:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1623:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1623:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1727:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1730:4:12", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1720:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1720:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1720:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1751:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1754:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1744:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1744:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1744:15:12" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "1581:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1816:207:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1826:19:12", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1842:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1836:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "1836:9:12" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1826:6:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1854:35:12", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1876:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1884:4:12", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1872:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1872:17:12" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1858:10:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1964:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1966:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "1966:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1966:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1907:10:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1919:18:12", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1904:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1904:34:12" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1943:10:12" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1955:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1940:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1940:22:12" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1901:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1901:62:12" - }, - "nodeType": "YulIf", - "src": "1898:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2002:2:12", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2006:10:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1995:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1995:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1995:22:12" - } - ] - }, - "name": "allocate_memory_2940", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1805:6:12", - "type": "" - } - ], - "src": "1770:253:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2073:289:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2083:19:12", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2099:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2093:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "2093:9:12" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2083:6:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2111:117:12", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2133:6:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "2149:4:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2155:2:12", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2145:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2145:13:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2160:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2141:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2141:86:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2129:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2129:99:12" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "2115:10:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2303:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "2305:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "2305:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2305:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2246:10:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2258:18:12", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2243:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "2243:34:12" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2282:10:12" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2294:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2279:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "2279:22:12" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "2240:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "2240:62:12" - }, - "nodeType": "YulIf", - "src": "2237:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2341:2:12", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2345:10:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2334:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2334:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2334:22:12" - } - ] - }, - "name": "allocate_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "2053:4:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "2062:6:12", - "type": "" - } - ], - "src": "2028:334:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2444:114:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2488:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "2490:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "2490:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2490:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2460:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2468:18:12", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2457:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "2457:30:12" - }, - "nodeType": "YulIf", - "src": "2454:56:12" - }, - { - "nodeType": "YulAssignment", - "src": "2519:33:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2535:1:12", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2538:6:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2531:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2531:14:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2547:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2527:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2527:25:12" - }, - "variableNames": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "2519:4:12" - } - ] - } - ] - }, - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2424:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "2435:4:12", - "type": "" - } - ], - "src": "2367:191:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2745:2587:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2755:83:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2830:6:12" - } - ], - "functionName": { - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulIdentifier", - "src": "2782:47:12" - }, - "nodeType": "YulFunctionCall", - "src": "2782:55:12" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "2766:15:12" - }, - "nodeType": "YulFunctionCall", - "src": "2766:72:12" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "2759:3:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2847:16:12", - "value": { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2860:3:12" - }, - "variables": [ - { - "name": "dst_1", - "nodeType": "YulTypedName", - "src": "2851:5:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2879:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2884:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2872:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2872:19:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2872:19:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2900:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2910:4:12", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2904:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2923:19:12", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2934:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2939:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2930:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2930:12:12" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2923:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2951:11:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2961:1:12", - "type": "", - "value": "5" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "2955:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2971:41:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2989:5:12" - }, - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "3000:2:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3004:6:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2996:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2996:15:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2985:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2985:27:12" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "2975:6:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3051:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3060:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3063:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3053:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3053:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3053:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "3027:6:12" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "3035:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "3035:14:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3024:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3024:26:12" - }, - "nodeType": "YulIf", - "src": "3021:46:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3076:16:12", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3087:5:12" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "3080:3:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3157:2142:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3171:36:12", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3203:3:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3190:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "3190:17:12" - }, - "variables": [ - { - "name": "innerOffset", - "nodeType": "YulTypedName", - "src": "3175:11:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3220:28:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3230:18:12", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "3224:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3296:74:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3314:11:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3324:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "3318:2:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3349:2:12" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3353:2:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3342:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3342:14:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3342:14:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "3267:11:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3280:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3264:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3264:19:12" - }, - "nodeType": "YulIf", - "src": "3261:109:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3383:33:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3397:5:12" - }, - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "3404:11:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3393:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3393:23:12" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "3387:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3479:74:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3497:11:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3507:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_6", - "nodeType": "YulTypedName", - "src": "3501:2:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "3532:2:12" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "3536:2:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3525:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3525:14:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3525:14:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "3440:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "3440:14:12" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "3456:2:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3436:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3436:23:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3461:4:12", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3432:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3432:34:12" - }, - "nodeType": "YulIf", - "src": "3429:124:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3566:37:12", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_2940", - "nodeType": "YulIdentifier", - "src": "3581:20:12" - }, - "nodeType": "YulFunctionCall", - "src": "3581:22:12" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "3570:7:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "3623:7:12" - }, - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "3651:2:12" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "3632:18:12" - }, - "nodeType": "YulFunctionCall", - "src": "3632:22:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3616:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3616:39:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3616:39:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3668:40:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "3700:2:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3704:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3696:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3696:11:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3683:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "3683:25:12" - }, - "variables": [ - { - "name": "value_2", - "nodeType": "YulTypedName", - "src": "3672:7:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3759:74:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3777:11:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3787:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_7", - "nodeType": "YulTypedName", - "src": "3781:2:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "3812:2:12" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "3816:2:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3805:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3805:14:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3805:14:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "3734:7:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3743:1:12", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3731:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3731:14:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3724:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3724:22:12" - }, - "nodeType": "YulIf", - "src": "3721:112:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "3857:7:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3866:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3853:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3853:16:12" - }, - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "3871:7:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3846:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3846:33:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3846:33:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3892:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3902:2:12", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_8", - "nodeType": "YulTypedName", - "src": "3896:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3917:39:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "3948:2:12" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "3952:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3944:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3944:11:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3931:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "3931:25:12" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "3921:6:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3999:74:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4017:11:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4027:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_9", - "nodeType": "YulTypedName", - "src": "4021:2:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "4052:2:12" - }, - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "4056:2:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4045:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4045:14:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4045:14:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "3975:6:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3983:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3972:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3972:14:12" - }, - "nodeType": "YulIf", - "src": "3969:104:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4086:26:12", - "value": { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "4101:2:12" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4105:6:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4097:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4097:15:12" - }, - "variables": [ - { - "name": "_10", - "nodeType": "YulTypedName", - "src": "4090:3:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4184:77:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4202:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4213:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_11", - "nodeType": "YulTypedName", - "src": "4206:3:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "4238:3:12" - }, - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "4243:3:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4231:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4231:16:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4231:16:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "4143:3:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4148:4:12", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4139:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4139:14:12" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "4155:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "4155:14:12" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4135:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4135:35:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4128:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4128:43:12" - }, - "nodeType": "YulIf", - "src": "4125:136:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4274:28:12", - "value": { - "arguments": [ - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "4298:3:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4285:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "4285:17:12" - }, - "variables": [ - { - "name": "_12", - "nodeType": "YulTypedName", - "src": "4278:3:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4315:82:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "4392:3:12" - } - ], - "functionName": { - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulIdentifier", - "src": "4344:47:12" - }, - "nodeType": "YulFunctionCall", - "src": "4344:52:12" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "4328:15:12" - }, - "nodeType": "YulFunctionCall", - "src": "4328:69:12" - }, - "variables": [ - { - "name": "dst_2", - "nodeType": "YulTypedName", - "src": "4319:5:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4410:18:12", - "value": { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "4423:5:12" - }, - "variables": [ - { - "name": "dst_3", - "nodeType": "YulTypedName", - "src": "4414:5:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "4448:5:12" - }, - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "4455:3:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4441:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4441:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4441:18:12" - }, - { - "nodeType": "YulAssignment", - "src": "4472:23:12", - "value": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "4485:5:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4492:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4481:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4481:14:12" - }, - "variableNames": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "4472:5:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4508:47:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "4532:3:12" - }, - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4541:2:12" - }, - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "4545:3:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4537:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4537:12:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4528:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4528:22:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4552:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4524:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4524:31:12" - }, - "variables": [ - { - "name": "srcEnd_1", - "nodeType": "YulTypedName", - "src": "4512:8:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4612:77:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4630:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4641:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_13", - "nodeType": "YulTypedName", - "src": "4634:3:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "4666:3:12" - }, - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "4671:3:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4659:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4659:16:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4659:16:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd_1", - "nodeType": "YulIdentifier", - "src": "4574:8:12" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "4584:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "4584:14:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4571:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "4571:28:12" - }, - "nodeType": "YulIf", - "src": "4568:121:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4702:25:12", - "value": { - "arguments": [ - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "4719:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4724:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4715:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4715:12:12" - }, - "variables": [ - { - "name": "src_1", - "nodeType": "YulTypedName", - "src": "4706:5:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4808:372:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4826:34:12", - "value": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "4854:5:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4841:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "4841:19:12" - }, - "variables": [ - { - "name": "value_3", - "nodeType": "YulTypedName", - "src": "4830:7:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4998:89:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "5020:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5031:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_14", - "nodeType": "YulTypedName", - "src": "5024:3:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_14", - "nodeType": "YulIdentifier", - "src": "5060:3:12" - }, - { - "name": "_14", - "nodeType": "YulIdentifier", - "src": "5065:3:12" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5053:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5053:16:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5053:16:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_3", - "nodeType": "YulIdentifier", - "src": "4890:7:12" - }, - { - "arguments": [ - { - "name": "value_3", - "nodeType": "YulIdentifier", - "src": "4903:7:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4912:66:12", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4899:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4899:80:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "4887:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "4887:93:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4880:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4880:101:12" - }, - "nodeType": "YulIf", - "src": "4877:210:12" - }, - { - "expression": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5111:5:12" - }, - { - "name": "value_3", - "nodeType": "YulIdentifier", - "src": "5118:7:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5104:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5104:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5104:22:12" - }, - { - "nodeType": "YulAssignment", - "src": "5143:23:12", - "value": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5156:5:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "5163:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5152:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5152:14:12" - }, - "variableNames": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5143:5:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "4751:5:12" - }, - { - "name": "srcEnd_1", - "nodeType": "YulIdentifier", - "src": "4758:8:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "4748:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "4748:19:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "4768:27:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4770:23:12", - "value": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "4783:5:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4790:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4779:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4779:14:12" - }, - "variableNames": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "4770:5:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "4744:3:12", - "statements": [] - }, - "src": "4740:440:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5204:7:12" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "5213:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5200:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5200:16:12" - }, - { - "name": "dst_3", - "nodeType": "YulIdentifier", - "src": "5218:5:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5193:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5193:31:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5193:31:12" - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "5244:3:12" - }, - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5249:7:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5237:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5237:20:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5237:20:12" - }, - { - "nodeType": "YulAssignment", - "src": "5270:19:12", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "5281:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "5286:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5277:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5277:12:12" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "5270:3:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3112:3:12" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "3117:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3109:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3109:15:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "3125:23:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3127:19:12", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3138:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3143:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3134:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3134:12:12" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3127:3:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "3105:3:12", - "statements": [] - }, - "src": "3101:2198:12" - }, - { - "nodeType": "YulAssignment", - "src": "5308:18:12", - "value": { - "name": "dst_1", - "nodeType": "YulIdentifier", - "src": "5321:5:12" - }, - "variableNames": [ - { - "name": "converted", - "nodeType": "YulIdentifier", - "src": "5308:9:12" - } - ] - } - ] - }, - "name": "convert_array_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2713:5:12", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2720:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nodeType": "YulTypedName", - "src": "2731:9:12", - "type": "" - } - ], - "src": "2563:2769:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5511:224:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5528:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5539:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5521:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5521:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5521:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5562:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5573:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5558:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5558:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5578:2:12", - "type": "", - "value": "34" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5551:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5551:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5551:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5601:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5612:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5597:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5597:18:12" - }, - { - "hexValue": "4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5617:34:12", - "type": "", - "value": "LibDiamond: Must be contract own" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5590:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5590:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5590:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5672:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5683:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5668:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5668:18:12" - }, - { - "hexValue": "6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5688:4:12", - "type": "", - "value": "er" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5661:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5661:32:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5661:32:12" - }, - { - "nodeType": "YulAssignment", - "src": "5702:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5714:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5725:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5710:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "5710:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5702:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5488:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5502:4:12", - "type": "" - } - ], - "src": "5337:398:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5772:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5789:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5792:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5782:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5782:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5782:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5886:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5889:4:12", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5879:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5879:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5879:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5910:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5913:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5903:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5903:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5903:15:12" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "5740:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5961:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5978:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5981:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5971:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "5971:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "5971:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6075:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6078:4:12", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6068:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6068:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6068:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6099:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6102:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6092:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6092:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6092:15:12" - } - ] - }, - "name": "panic_error_0x21", - "nodeType": "YulFunctionDefinition", - "src": "5929:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6292:229:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6309:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6320:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6302:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6302:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6302:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6343:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6354:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6339:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6339:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6359:2:12", - "type": "", - "value": "39" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6332:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6332:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6332:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6382:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6393:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6378:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6378:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a20496e636f72726563742046616365744375", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6398:34:12", - "type": "", - "value": "LibDiamondCut: Incorrect FacetCu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6371:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6371:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6371:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6453:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6464:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6449:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6449:18:12" - }, - { - "hexValue": "74416374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6469:9:12", - "type": "", - "value": "tAction" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6442:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6442:37:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6442:37:12" - }, - { - "nodeType": "YulAssignment", - "src": "6488:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6500:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6511:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6496:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6496:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6488:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6269:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6283:4:12", - "type": "" - } - ], - "src": "6118:403:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6558:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6575:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6578:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6568:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6568:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6568:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6672:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6675:4:12", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6665:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6665:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6665:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6696:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6699:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6689:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6689:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6689:15:12" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "6526:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6762:148:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6853:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "6855:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "6855:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6855:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6778:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6785:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "6775:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "6775:77:12" - }, - "nodeType": "YulIf", - "src": "6772:103:12" - }, - { - "nodeType": "YulAssignment", - "src": "6884:20:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6895:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6902:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6891:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6891:13:12" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "6884:3:12" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6744:5:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "6754:3:12", - "type": "" - } - ], - "src": "6715:195:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6959:83:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "6976:3:12" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6985:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6992:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "6981:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "6981:54:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6969:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "6969:67:12" - }, - "nodeType": "YulExpressionStatement", - "src": "6969:67:12" - } - ] - }, - "name": "abi_encode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6943:5:12", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "6950:3:12", - "type": "" - } - ], - "src": "6915:127:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7100:205:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7110:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7119:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "7114:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7179:63:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "7204:3:12" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7209:1:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7200:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7200:11:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "7223:3:12" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7228:1:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7219:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7219:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7213:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "7213:18:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7193:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7193:39:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7193:39:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7140:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7143:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "7137:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "7137:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "7151:19:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "7153:15:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7162:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7165:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7158:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7158:10:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7153:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "7133:3:12", - "statements": [] - }, - "src": "7129:113:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7268:31:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "7281:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7286:6:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7277:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7277:16:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7295:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7270:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7270:27:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7270:27:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7257:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7260:6:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "7254:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "7254:13:12" - }, - "nodeType": "YulIf", - "src": "7251:48:12" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "7078:3:12", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "7083:3:12", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7088:6:12", - "type": "" - } - ], - "src": "7047:258:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7359:267:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7369:26:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7389:5:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7383:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "7383:12:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7373:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7411:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7416:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7404:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7404:19:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7404:19:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7458:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7465:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7454:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7454:16:12" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7476:3:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7481:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7472:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7472:14:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7488:6:12" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "7432:21:12" - }, - "nodeType": "YulFunctionCall", - "src": "7432:63:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7432:63:12" - }, - { - "nodeType": "YulAssignment", - "src": "7504:116:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7519:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7532:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7540:2:12", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7528:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7528:15:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7545:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7524:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7524:88:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7515:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7515:98:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7615:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7511:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7511:109:12" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "7504:3:12" - } - ] - } - ] - }, - "name": "abi_encode_bytes", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7336:5:12", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "7343:3:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "7351:3:12", - "type": "" - } - ], - "src": "7310:316:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7906:1997:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7916:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7926:2:12", - "type": "", - "value": "96" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "7920:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7937:32:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7955:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7966:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7951:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "7951:18:12" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "7941:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7985:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7996:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7978:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "7978:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "7978:21:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8008:17:12", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "8019:6:12" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "8012:3:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8034:27:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8054:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8048:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "8048:13:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "8038:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "8077:6:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8085:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8070:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8070:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8070:22:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8101:13:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8111:3:12", - "type": "", - "value": "128" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "8105:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "8123:25:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8134:9:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "8145:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8130:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8130:18:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8123:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8157:53:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8179:9:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8194:1:12", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8197:6:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "8190:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8190:14:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8175:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8175:30:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "8207:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8171:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8171:39:12" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "8161:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8219:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8229:4:12", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "8223:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8242:29:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8260:6:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "8268:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8256:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8256:15:12" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "8246:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8280:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8289:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "8284:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8348:1384:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8369:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8382:6:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8390:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "8378:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8378:22:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8402:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8374:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8374:95:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8362:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8362:108:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8362:108:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8483:23:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "8499:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8493:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "8493:13:12" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "8487:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8519:29:12", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8537:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8545:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8533:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8533:15:12" - }, - "variables": [ - { - "name": "tail_3", - "nodeType": "YulTypedName", - "src": "8523:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8568:6:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "8586:2:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8580:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "8580:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8591:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8576:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8576:58:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8561:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8561:74:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8561:74:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8648:38:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "8678:2:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "8682:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8674:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8674:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8668:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "8668:18:12" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "8652:12:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8742:184:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8767:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8770:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8760:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8760:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8760:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8872:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8875:4:12", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8865:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8865:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8865:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8904:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8907:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "8897:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8897:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8897:15:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "8712:12:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8726:1:12", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "8709:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "8709:19:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "8702:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8702:27:12" - }, - "nodeType": "YulIf", - "src": "8699:227:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8950:6:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "8958:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8946:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8946:15:12" - }, - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "8963:12:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8939:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "8939:37:12" - }, - "nodeType": "YulExpressionStatement", - "src": "8939:37:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8989:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8999:4:12", - "type": "", - "value": "0x40" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "8993:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9016:40:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "9048:2:12" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "9052:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9044:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9044:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9038:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "9038:18:12" - }, - "variables": [ - { - "name": "memberValue0_1", - "nodeType": "YulTypedName", - "src": "9020:14:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9080:6:12" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "9088:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9076:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9076:15:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "9093:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9069:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9069:27:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9069:27:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9109:19:12", - "value": { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "9122:6:12" - }, - "variables": [ - { - "name": "pos_1", - "nodeType": "YulTypedName", - "src": "9113:5:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9141:37:12", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "9163:14:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9157:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "9157:21:12" - }, - "variables": [ - { - "name": "length_1", - "nodeType": "YulTypedName", - "src": "9145:8:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "9198:6:12" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "9206:8:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9191:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9191:24:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9191:24:12" - }, - { - "nodeType": "YulAssignment", - "src": "9228:24:12", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9241:6:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "9249:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9237:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9237:15:12" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9228:5:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9265:39:12", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "9285:14:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9301:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9281:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9281:23:12" - }, - "variables": [ - { - "name": "srcPtr_1", - "nodeType": "YulTypedName", - "src": "9269:8:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9317:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9328:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i_1", - "nodeType": "YulTypedName", - "src": "9321:3:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9403:221:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9428:5:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9445:8:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9439:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "9439:15:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9456:66:12", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "9435:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9435:88:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9421:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9421:103:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9421:103:12" - }, - { - "nodeType": "YulAssignment", - "src": "9541:23:12", - "value": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9554:5:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9561:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9550:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9550:14:12" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9541:5:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9581:29:12", - "value": { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9597:8:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9607:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9593:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9593:17:12" - }, - "variableNames": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9581:8:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9353:3:12" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "9358:8:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "9350:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "9350:17:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "9368:22:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "9370:18:12", - "value": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9381:3:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9386:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9377:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9377:11:12" - }, - "variableNames": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9370:3:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "9346:3:12", - "statements": [] - }, - "src": "9342:282:12" - }, - { - "nodeType": "YulAssignment", - "src": "9637:15:12", - "value": { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9647:5:12" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9637:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9665:25:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "9679:6:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9687:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9675:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9675:15:12" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "9665:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9703:19:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9714:3:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9719:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9710:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9710:12:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9703:3:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8310:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8313:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "8307:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "8307:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "8321:18:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8323:14:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8332:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8335:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8328:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "8328:9:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8323:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "8303:3:12", - "statements": [] - }, - "src": "8299:1433:12" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "9760:6:12" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9772:9:12" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9783:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9768:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9768:18:12" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "9741:18:12" - }, - "nodeType": "YulFunctionCall", - "src": "9741:46:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9741:46:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9807:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9818:4:12", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9803:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9803:20:12" - }, - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9829:6:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9837:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9825:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "9825:22:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9796:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "9796:52:12" - }, - "nodeType": "YulExpressionStatement", - "src": "9796:52:12" - }, - { - "nodeType": "YulAssignment", - "src": "9857:40:12", - "value": { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "9882:6:12" - }, - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9890:6:12" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "9865:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "9865:32:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9857:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7859:9:12", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "7870:6:12", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "7878:6:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "7886:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7897:4:12", - "type": "" - } - ], - "src": "7631:2272:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10082:233:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10099:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10110:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10092:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10092:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10092:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10133:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10144:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10129:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10129:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10149:2:12", - "type": "", - "value": "43" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10122:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10122:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10122:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10172:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10183:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10168:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10168:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10188:34:12", - "type": "", - "value": "LibDiamondCut: No selectors in f" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10161:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10161:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10161:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10243:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10254:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10239:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10239:18:12" - }, - { - "hexValue": "6163657420746f20637574", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10259:13:12", - "type": "", - "value": "acet to cut" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10232:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10232:41:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10232:41:12" - }, - { - "nodeType": "YulAssignment", - "src": "10282:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10294:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10305:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10290:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10290:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10282:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10059:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10073:4:12", - "type": "" - } - ], - "src": "9908:407:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10494:234:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10511:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10522:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10504:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10504:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10504:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10545:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10556:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10541:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10541:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10561:2:12", - "type": "", - "value": "44" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10534:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10534:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10534:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10584:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10595:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10580:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10580:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204164642066616365742063616e27742062", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10600:34:12", - "type": "", - "value": "LibDiamondCut: Add facet can't b" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10573:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10573:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10573:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10655:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10666:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10651:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10651:18:12" - }, - { - "hexValue": "652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10671:14:12", - "type": "", - "value": "e address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10644:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10644:42:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10644:42:12" - }, - { - "nodeType": "YulAssignment", - "src": "10695:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10707:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10718:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10703:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10703:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10695:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10471:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10485:4:12", - "type": "" - } - ], - "src": "10320:408:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10907:243:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10924:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10935:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10917:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10917:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10917:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10958:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10969:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10954:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10954:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10974:2:12", - "type": "", - "value": "53" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10947:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10947:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10947:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10997:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11008:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10993:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "10993:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11013:34:12", - "type": "", - "value": "LibDiamondCut: Can't add functio" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10986:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "10986:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "10986:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11068:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11079:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11064:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11064:18:12" - }, - { - "hexValue": "6e207468617420616c726561647920657869737473", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11084:23:12", - "type": "", - "value": "n that already exists" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11057:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11057:51:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11057:51:12" - }, - { - "nodeType": "YulAssignment", - "src": "11117:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11129:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11140:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11125:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11125:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11117:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10884:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10898:4:12", - "type": "" - } - ], - "src": "10733:417:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11201:171:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "11211:36:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11221:26:12", - "type": "", - "value": "0xffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "11215:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11256:29:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11275:5:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "11282:2:12" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "11271:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11271:14:12" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "11260:7:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11313:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "11315:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "11315:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11315:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "11300:7:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "11309:2:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "11297:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "11297:15:12" - }, - "nodeType": "YulIf", - "src": "11294:41:12" - }, - { - "nodeType": "YulAssignment", - "src": "11344:22:12", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "11355:7:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11364:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11351:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11351:15:12" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "11344:3:12" - } - ] - } - ] - }, - "name": "increment_t_uint96", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "11183:5:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "11193:3:12", - "type": "" - } - ], - "src": "11155:217:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11551:246:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11568:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11579:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11561:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11561:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11561:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11602:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11613:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11598:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11598:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11618:2:12", - "type": "", - "value": "56" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11591:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11591:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11591:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11641:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11652:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11637:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11637:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11657:34:12", - "type": "", - "value": "LibDiamondCut: Can't replace fun" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11630:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11630:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11630:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11712:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11723:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11708:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11708:18:12" - }, - { - "hexValue": "6374696f6e20776974682073616d652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11728:26:12", - "type": "", - "value": "ction with same function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11701:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11701:54:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11701:54:12" - }, - { - "nodeType": "YulAssignment", - "src": "11764:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11776:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11787:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11772:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "11772:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11764:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11528:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11542:4:12", - "type": "" - } - ], - "src": "11377:420:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11976:244:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11993:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12004:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11986:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "11986:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "11986:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12027:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12038:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12023:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12023:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12043:2:12", - "type": "", - "value": "54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12016:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12016:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12016:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12066:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12077:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12062:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12062:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12082:34:12", - "type": "", - "value": "LibDiamondCut: Remove facet addr" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12055:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12055:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12055:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12137:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12148:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12133:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12133:18:12" - }, - { - "hexValue": "657373206d7573742062652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12153:24:12", - "type": "", - "value": "ess must be address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12126:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12126:52:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12126:52:12" - }, - { - "nodeType": "YulAssignment", - "src": "12187:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12199:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12210:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12195:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12195:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12187:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11953:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11967:4:12", - "type": "" - } - ], - "src": "11802:418:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12399:250:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12416:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12427:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12409:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12409:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12409:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12450:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12461:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12446:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12446:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12466:2:12", - "type": "", - "value": "60" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12439:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12439:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12439:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12489:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12500:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12485:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12485:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e6974206973206164647265737328", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12505:34:12", - "type": "", - "value": "LibDiamondCut: _init is address(" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12478:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12478:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12478:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12560:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12571:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12556:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12556:18:12" - }, - { - "hexValue": "3029206275745f63616c6c64617461206973206e6f7420656d707479", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12576:30:12", - "type": "", - "value": "0) but_calldata is not empty" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12549:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12549:58:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12549:58:12" - }, - { - "nodeType": "YulAssignment", - "src": "12616:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12628:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12639:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12624:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12624:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12616:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12376:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12390:4:12", - "type": "" - } - ], - "src": "12225:424:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12828:251:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12845:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12856:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12838:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12838:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12838:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12879:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12890:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12875:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12875:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12895:2:12", - "type": "", - "value": "61" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12868:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12868:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12868:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12918:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12929:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12914:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12914:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d7074", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12934:34:12", - "type": "", - "value": "LibDiamondCut: _calldata is empt" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12907:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12907:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12907:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12989:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13000:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12985:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "12985:18:12" - }, - { - "hexValue": "7920627574205f696e6974206973206e6f742061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13005:31:12", - "type": "", - "value": "y but _init is not address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12978:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "12978:59:12" - }, - "nodeType": "YulExpressionStatement", - "src": "12978:59:12" - }, - { - "nodeType": "YulAssignment", - "src": "13046:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13058:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13069:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13054:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13054:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13046:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12805:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12819:4:12", - "type": "" - } - ], - "src": "12654:425:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13221:137:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "13231:27:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13251:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "13245:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "13245:13:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "13235:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13293:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13301:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13289:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13289:17:12" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "13308:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "13313:6:12" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "13267:21:12" - }, - "nodeType": "YulFunctionCall", - "src": "13267:53:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13267:53:12" - }, - { - "nodeType": "YulAssignment", - "src": "13329:23:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "13340:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "13345:6:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13336:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13336:16:12" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "13329:3:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "13197:3:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13202:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "13213:3:12", - "type": "" - } - ], - "src": "13084:274:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13484:98:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13501:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13512:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13494:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13494:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13494:21:12" - }, - { - "nodeType": "YulAssignment", - "src": "13524:52:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13549:6:12" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13561:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13572:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13557:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13557:18:12" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "13532:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "13532:44:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13524:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13453:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13464:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13475:4:12", - "type": "" - } - ], - "src": "13363:219:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13761:228:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13778:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13789:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13771:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13771:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13771:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13812:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13823:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13808:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13808:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13828:2:12", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13801:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13801:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13801:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13851:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13862:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13847:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13847:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13867:34:12", - "type": "", - "value": "LibDiamondCut: _init function re" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13840:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13840:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13840:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13922:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13933:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13918:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13918:18:12" - }, - { - "hexValue": "766572746564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13938:8:12", - "type": "", - "value": "verted" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13911:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "13911:36:12" - }, - "nodeType": "YulExpressionStatement", - "src": "13911:36:12" - }, - { - "nodeType": "YulAssignment", - "src": "13956:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13968:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13979:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13964:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "13964:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13956:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13738:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13752:4:12", - "type": "" - } - ], - "src": "13587:402:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14168:245:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14185:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14196:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14178:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14178:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14178:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14219:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14230:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14215:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14215:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14235:2:12", - "type": "", - "value": "55" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14208:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14208:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14208:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14258:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14269:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14254:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14254:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e63", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14274:34:12", - "type": "", - "value": "LibDiamondCut: Can't remove func" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14247:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14247:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14247:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14329:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14340:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14325:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14325:18:12" - }, - { - "hexValue": "74696f6e207468617420646f65736e2774206578697374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14345:25:12", - "type": "", - "value": "tion that doesn't exist" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14318:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14318:53:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14318:53:12" - }, - { - "nodeType": "YulAssignment", - "src": "14380:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14392:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14403:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14388:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14388:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14380:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14145:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "14159:4:12", - "type": "" - } - ], - "src": "13994:419:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14592:236:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14609:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14620:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14602:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14602:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14602:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14643:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14654:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14639:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14639:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14659:2:12", - "type": "", - "value": "46" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14632:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14632:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14632:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14682:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14693:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14678:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14678:18:12" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d75", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14698:34:12", - "type": "", - "value": "LibDiamondCut: Can't remove immu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14671:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14671:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14671:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14753:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14764:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14749:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14749:18:12" - }, - { - "hexValue": "7461626c652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14769:16:12", - "type": "", - "value": "table function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14742:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "14742:44:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14742:44:12" - }, - { - "nodeType": "YulAssignment", - "src": "14795:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14807:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14818:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14803:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14803:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14795:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14569:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "14583:4:12", - "type": "" - } - ], - "src": "14418:410:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14882:76:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "14904:22:12", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "14906:16:12" - }, - "nodeType": "YulFunctionCall", - "src": "14906:18:12" - }, - "nodeType": "YulExpressionStatement", - "src": "14906:18:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "14898:1:12" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "14901:1:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "14895:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "14895:8:12" - }, - "nodeType": "YulIf", - "src": "14892:34:12" - }, - { - "nodeType": "YulAssignment", - "src": "14935:17:12", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "14947:1:12" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "14950:1:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "14943:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "14943:9:12" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "14935:4:12" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "14864:1:12", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "14867:1:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "14873:4:12", - "type": "" - } - ], - "src": "14833:125:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14995:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15012:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15015:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15005:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "15005:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "15005:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15109:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15112:4:12", - "type": "", - "value": "0x31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15102:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "15102:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "15102:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15133:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15136:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "15126:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "15126:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "15126:15:12" - } - ] - }, - "name": "panic_error_0x31", - "nodeType": "YulFunctionDefinition", - "src": "14963:184:12" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptrt_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, shl(5, length)), 0x20), dataEnd) { revert(0, 0) }\n value0 := add(_2, 0x20)\n value1 := length\n value2 := abi_decode_address(add(headStart, 0x20))\n let offset_1 := calldataload(add(headStart, 64))\n if gt(offset_1, _1) { revert(0, 0) }\n let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n value3 := value3_1\n value4 := value4_1\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_2940() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 0x60)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_array_struct_FacetCut_dyn(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n size := add(shl(5, length), 0x20)\n }\n function convert_array_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr(value, length) -> converted\n {\n let dst := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(length))\n let dst_1 := dst\n mstore(dst, length)\n let _1 := 0x20\n dst := add(dst, _1)\n let _2 := 5\n let srcEnd := add(value, shl(_2, length))\n if gt(srcEnd, calldatasize()) { revert(0, 0) }\n let src := value\n for { } lt(src, srcEnd) { src := add(src, _1) }\n {\n let innerOffset := calldataload(src)\n let _3 := 0xffffffffffffffff\n if gt(innerOffset, _3)\n {\n let _4 := 0\n revert(_4, _4)\n }\n let _5 := add(value, innerOffset)\n if slt(sub(calldatasize(), _5), 0x60)\n {\n let _6 := 0\n revert(_6, _6)\n }\n let value_1 := allocate_memory_2940()\n mstore(value_1, abi_decode_address(_5))\n let value_2 := calldataload(add(_5, _1))\n if iszero(lt(value_2, 3))\n {\n let _7 := 0\n revert(_7, _7)\n }\n mstore(add(value_1, _1), value_2)\n let _8 := 64\n let offset := calldataload(add(_5, _8))\n if gt(offset, _3)\n {\n let _9 := 0\n revert(_9, _9)\n }\n let _10 := add(_5, offset)\n if iszero(slt(add(_10, 0x1f), calldatasize()))\n {\n let _11 := 0\n revert(_11, _11)\n }\n let _12 := calldataload(_10)\n let dst_2 := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_12))\n let dst_3 := dst_2\n mstore(dst_2, _12)\n dst_2 := add(dst_2, _1)\n let srcEnd_1 := add(add(_10, shl(_2, _12)), _1)\n if gt(srcEnd_1, calldatasize())\n {\n let _13 := 0\n revert(_13, _13)\n }\n let src_1 := add(_10, _1)\n for { } lt(src_1, srcEnd_1) { src_1 := add(src_1, _1) }\n {\n let value_3 := calldataload(src_1)\n if iszero(eq(value_3, and(value_3, 0xffffffff00000000000000000000000000000000000000000000000000000000)))\n {\n let _14 := 0\n revert(_14, _14)\n }\n mstore(dst_2, value_3)\n dst_2 := add(dst_2, _1)\n }\n mstore(add(value_1, _8), dst_3)\n mstore(dst, value_1)\n dst := add(dst, _1)\n }\n converted := dst_1\n }\n function abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 34)\n mstore(add(headStart, 64), \"LibDiamond: Must be contract own\")\n mstore(add(headStart, 96), \"er\")\n tail := add(headStart, 128)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function panic_error_0x21()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 39)\n mstore(add(headStart, 64), \"LibDiamondCut: Incorrect FacetCu\")\n mstore(add(headStart, 96), \"tAction\")\n tail := add(headStart, 128)\n }\n function panic_error_0x11()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function abi_encode_address(value, pos)\n {\n mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n }\n function abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n let _1 := 96\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 128\n pos := add(headStart, _2)\n let tail_2 := add(add(headStart, shl(5, length)), _2)\n let _3 := 0x20\n let srcPtr := add(value0, _3)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80))\n let _4 := mload(srcPtr)\n let tail_3 := add(tail_2, _1)\n mstore(tail_2, and(mload(_4), 0xffffffffffffffffffffffffffffffffffffffff))\n let memberValue0 := mload(add(_4, _3))\n if iszero(lt(memberValue0, 3))\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n mstore(add(tail_2, _3), memberValue0)\n let _5 := 0x40\n let memberValue0_1 := mload(add(_4, _5))\n mstore(add(tail_2, _5), _1)\n let pos_1 := tail_3\n let length_1 := mload(memberValue0_1)\n mstore(tail_3, length_1)\n pos_1 := add(tail_2, _2)\n let srcPtr_1 := add(memberValue0_1, _3)\n let i_1 := 0\n for { } lt(i_1, length_1) { i_1 := add(i_1, 1) }\n {\n mstore(pos_1, and(mload(srcPtr_1), 0xffffffff00000000000000000000000000000000000000000000000000000000))\n pos_1 := add(pos_1, _3)\n srcPtr_1 := add(srcPtr_1, _3)\n }\n tail_2 := pos_1\n srcPtr := add(srcPtr, _3)\n pos := add(pos, _3)\n }\n abi_encode_address(value1, add(headStart, _3))\n mstore(add(headStart, 0x40), sub(tail_2, headStart))\n tail := abi_encode_bytes(value2, tail_2)\n }\n function abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 43)\n mstore(add(headStart, 64), \"LibDiamondCut: No selectors in f\")\n mstore(add(headStart, 96), \"acet to cut\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"LibDiamondCut: Add facet can't b\")\n mstore(add(headStart, 96), \"e address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 53)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't add functio\")\n mstore(add(headStart, 96), \"n that already exists\")\n tail := add(headStart, 128)\n }\n function increment_t_uint96(value) -> ret\n {\n let _1 := 0xffffffffffffffffffffffff\n let value_1 := and(value, _1)\n if eq(value_1, _1) { panic_error_0x11() }\n ret := add(value_1, 1)\n }\n function abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 56)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't replace fun\")\n mstore(add(headStart, 96), \"ction with same function\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 54)\n mstore(add(headStart, 64), \"LibDiamondCut: Remove facet addr\")\n mstore(add(headStart, 96), \"ess must be address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 60)\n mstore(add(headStart, 64), \"LibDiamondCut: _init is address(\")\n mstore(add(headStart, 96), \"0) but_calldata is not empty\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 61)\n mstore(add(headStart, 64), \"LibDiamondCut: _calldata is empt\")\n mstore(add(headStart, 96), \"y but _init is not address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"LibDiamondCut: _init function re\")\n mstore(add(headStart, 96), \"verted\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 55)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove func\")\n mstore(add(headStart, 96), \"tion that doesn't exist\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 46)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove immu\")\n mstore(add(headStart, 96), \"table function\")\n tail := add(headStart, 128)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y) { panic_error_0x11() }\n diff := sub(x, y)\n }\n function panic_error_0x31()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x31)\n revert(0, 0x24)\n }\n}", - "id": 12, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1F931C1C EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x166F JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x4D PUSH2 0x9E JUMP JUMPDEST PUSH2 0x97 PUSH2 0x5A DUP6 DUP8 PUSH2 0x17EC JUMP JUMPDEST DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x16E SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x16C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A204D75737420626520636F6E7472616374206F776E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6572000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x367 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x18E JUMPI PUSH2 0x18E PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1AF JUMPI PUSH2 0x1AF PUSH2 0x1977 JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C1 JUMPI PUSH2 0x1C1 PUSH2 0x1977 JUMP JUMPDEST EQ ISZERO PUSH2 0x210 JUMPI PUSH2 0x20B DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1DC JUMPI PUSH2 0x1DC PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1FA JUMPI PUSH2 0x1FA PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x354 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x224 JUMPI PUSH2 0x224 PUSH2 0x1977 JUMP JUMPDEST EQ ISZERO PUSH2 0x26E JUMPI PUSH2 0x20B DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x23F JUMPI PUSH2 0x23F PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x25D JUMPI PUSH2 0x25D PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x75E JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x282 JUMPI PUSH2 0x282 PUSH2 0x1977 JUMP JUMPDEST EQ ISZERO PUSH2 0x2CC JUMPI PUSH2 0x20B DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x29D JUMPI PUSH2 0x29D PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2BB JUMPI PUSH2 0x2BB PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xB1B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74416374696F6E00000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST POP DUP1 PUSH2 0x35F DUP2 PUSH2 0x19D5 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x171 JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x39B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1A84 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x3AD DUP3 DUP3 PUSH2 0xD0E JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x443 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x507 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x54C JUMPI PUSH2 0x54C DUP3 DUP6 PUSH2 0xFC1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x97 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x56C JUMPI PUSH2 0x56C PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x651 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E207468617420616C7265616479206578697374730000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0x746 DUP2 PUSH2 0x1BEC JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0x756 SWAP1 PUSH2 0x19D5 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x54F JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x7EF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x8B3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x8F8 JUMPI PUSH2 0x8F8 DUP3 DUP6 PUSH2 0xFC1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x97 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x918 JUMPI PUSH2 0x918 PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 EQ ISZERO PUSH2 0xA03 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH2 0xA0E DUP6 DUP3 DUP5 PUSH2 0x1050 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xB03 DUP2 PUSH2 0x1BEC JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xB13 SWAP1 PUSH2 0x19D5 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x8FB JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xBAC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO PUSH2 0xC71 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x657373206D757374206265206164647265737328302900000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xD08 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC91 JUMPI PUSH2 0xC91 PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xCF3 DUP5 DUP3 DUP5 PUSH2 0x1050 JUMP JUMPDEST POP POP DUP1 DUP1 PUSH2 0xD00 SWAP1 PUSH2 0x19D5 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC74 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xDBC JUMPI DUP1 MLOAD ISZERO PUSH2 0xDB8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xE4D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0xE8C JUMPI PUSH2 0xE8C DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1C95 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x15C2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xEB4 SWAP2 SWAP1 PUSH2 0x1C18 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xEEF JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xEF4 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0xD08 JUMPI DUP1 MLOAD ISZERO PUSH2 0xF39 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x163 SWAP2 SWAP1 PUSH2 0x1C34 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7665727465640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH2 0xFE3 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CBD PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x15C2 JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x10F3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ ISZERO PUSH2 0x1199 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7461626C652066756E6374696F6E000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x163 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP2 DIV PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 PUSH2 0x1223 SWAP2 PUSH2 0x1C4E JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0x136A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x1265 JUMPI PUSH2 0x1265 PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x12C3 JUMPI PUSH2 0x12C3 PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x13A0 JUMPI PUSH2 0x13A0 PUSH2 0x1C65 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE DUP1 PUSH2 0x97 JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x1435 SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x1C4E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x1523 JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1481 JUMPI PUSH2 0x1481 PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x14BF JUMPI PUSH2 0x14BF PUSH2 0x1948 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0x1536 JUMPI PUSH2 0x1536 PUSH2 0x1C65 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 EXTCODESIZE DUP2 DUP2 PUSH2 0xD08 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x163 SWAP2 SWAP1 PUSH2 0x1C34 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x1621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1638 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1650 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x1668 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1687 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x169F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x16B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x16C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x16D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP8 POP DUP1 SWAP7 POP POP PUSH2 0x16ED PUSH1 0x20 DUP10 ADD PUSH2 0x15FD JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1703 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1710 DUP9 DUP3 DUP10 ADD PUSH2 0x1626 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1773 JUMPI PUSH2 0x1773 PUSH2 0x1721 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x17C0 JUMPI PUSH2 0x17C0 PUSH2 0x1721 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x17E2 JUMPI PUSH2 0x17E2 PUSH2 0x1721 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17FF PUSH2 0x17FA DUP5 PUSH2 0x17C8 JUMP JUMPDEST PUSH2 0x1779 JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP2 SWAP1 PUSH1 0x5 DUP7 DUP2 SHL DUP7 ADD CALLDATASIZE DUP2 GT ISZERO PUSH2 0x181D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x193B JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1840 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP PUSH1 0x60 DUP3 CALLDATASIZE SUB SLT ISZERO PUSH2 0x1856 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x185E PUSH2 0x1750 JUMP JUMPDEST PUSH2 0x1867 DUP4 PUSH2 0x15FD JUMP JUMPDEST DUP2 MSTORE DUP7 DUP4 ADD CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x187B JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP9 ADD MSTORE PUSH1 0x40 DUP4 DUP2 ADD CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x1893 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP3 CALLDATASIZE PUSH1 0x1F DUP6 ADD SLT PUSH2 0x18AA JUMPI PUSH1 0x0 SWAP3 POP DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0x18BA PUSH2 0x17FA DUP5 PUSH2 0x17C8 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP3 DUP8 SHL DUP5 ADD DUP9 ADD SWAP3 DUP9 DUP2 ADD SWAP1 CALLDATASIZE DUP6 GT ISZERO PUSH2 0x18D7 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP5 DUP10 ADD SWAP5 JUMPDEST DUP5 DUP7 LT ISZERO PUSH2 0x1924 JUMPI DUP6 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x1915 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 MSTORE SWAP5 DUP10 ADD SWAP5 SWAP1 DUP10 ADD SWAP1 PUSH2 0x18DC JUMP JUMPDEST SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 MSTORE POP POP SWAP5 DUP4 ADD SWAP5 DUP4 ADD PUSH2 0x181F JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1A07 JUMPI PUSH2 0x1A07 PUSH2 0x19A6 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1A29 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A11 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD08 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1A52 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1A0E JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1BAF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP11 DUP6 SUB ADD DUP7 MSTORE DUP2 MLOAD DUP9 DUP6 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP5 DUP3 ADD MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x1B36 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x1B9A JUMPI DUP4 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x1B58 JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1AAD JUMP JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x1BDE DUP2 DUP10 PUSH2 0x1A3A JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x1C0E JUMPI PUSH2 0x1C0E PUSH2 0x19A6 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1C2A DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1A0E JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C47 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1A3A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1C60 JUMPI PUSH2 0x1C60 PUSH2 0x19A6 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2646970 PUSH7 0x73582212205EBB SSTORE 0x27 BYTE PUSH28 0x4137FFF1FDB3061128FBDE1889B068F341304476640C9C0371CF6473 PUSH16 0x6C634300080A00330000000000000000 ", - "sourceMap": "482:747:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;971:256;;;;;;:::i;:::-;;:::i;:::-;;;1123:35;:33;:35::i;:::-;1168:52;;1190:11;;1168:52;:::i;:::-;1203:5;1210:9;;1168:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1168:21:2;;-1:-1:-1;;;1168:52:2:i;:::-;971:256;;;;;:::o;2263:156:11:-;492:45;2343:30;;;;;2329:10;:44;2321:91;;;;;;;5539:2:12;2321:91:11;;;5521:21:12;5578:2;5558:18;;;5551:30;5617:34;5597:18;;;5590:62;5688:4;5668:18;;;5661:32;5710:19;;2321:91:11;;;;;;;;;2263:156::o;2563:1067::-;2719:18;2714:806;2752:11;:18;2739:10;:31;2714:806;;;2800:33;2836:11;2848:10;2836:23;;;;;;;;:::i;:::-;;;;;;;:30;;;2800:66;;2894:30;2884:40;;;;;;;;:::i;:::-;:6;:40;;;;;;;;:::i;:::-;;2880:630;;;2944:93;2957:11;2969:10;2957:23;;;;;;;;:::i;:::-;;;;;;;:36;;;2995:11;3007:10;2995:23;;;;;;;;:::i;:::-;;;;;;;:41;;;2944:12;:93::i;:::-;2880:630;;;3072:34;3062:6;:44;;;;;;;;:::i;:::-;;3058:452;;;3126:97;3143:11;3155:10;3143:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3181:11;3193:10;3181:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3126:16;:97::i;3058:452::-;3258:33;3248:6;:43;;;;;;;;:::i;:::-;;3244:266;;;3311:96;3327:11;3339:10;3327:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3365:11;3377:10;3365:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3311:15;:96::i;3244:266::-;3446:49;;;;;6320:2:12;3446:49:11;;;6302:21:12;6359:2;6339:18;;;6332:30;6398:34;6378:18;;;6371:62;6469:9;6449:18;;;6442:37;6496:19;;3446:49:11;6118:403:12;3244:266:11;-1:-1:-1;2772:12:11;;;;:::i;:::-;;;;2714:806;;;;3534:41;3545:11;3558:5;3565:9;3534:41;;;;;;;;:::i;:::-;;;;;;;;3585:38;3606:5;3613:9;3585:20;:38::i;:::-;2563:1067;;;:::o;3636:1089::-;3772:1;3744:18;:25;:29;3736:85;;;;;;;10110:2:12;3736:85:11;;;10092:21:12;10149:2;10129:18;;;10122:30;10188:34;10168:18;;;10161:62;10259:13;10239:18;;;10232:41;10290:19;;3736:85:11;9908:407:12;3736:85:11;492:45;3901:27;;;3893:84;;;;;;;10522:2:12;3893:84:11;;;10504:21:12;10561:2;10541:18;;;10534:30;10600:34;10580:18;;;10573:62;10671:14;10651:18;;;10644:42;10703:19;;3893:84:11;10320:408:12;3893:84:11;4020:40;;;3987:23;4020:40;;;:25;;;:40;;;;;:65;4154:21;;;4150:91;;4191:27;4200:2;4204:13;4191:8;:27::i;:::-;4255:21;4250:469;4294:18;:25;4278:13;:41;4250:469;;;4352:15;4370:18;4389:13;4370:33;;;;;;;;:::i;:::-;;;;;;;;;;;;4443:39;;;4417:23;4443:39;;;;;;;;;;;:52;4370:33;;-1:-1:-1;4443:52:11;;4517:29;;4509:95;;;;;;;10935:2:12;4509:95:11;;;10917:21:12;10974:2;10954:18;;;10947:30;11013:34;10993:18;;;10986:62;11084:23;11064:18;;;11057:51;11125:19;;4509:95:11;10733:417:12;4509:95:11;7084:40;;;:29;:40;;;;;;;;;;;:85;;;;;;;;;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;7084:85;7263:69;;;;4690:18;;;;:::i;:::-;;;;4338:381;;4321:15;;;;;:::i;:::-;;;;4250:469;;4731:1138;4871:1;4843:18;:25;:29;4835:85;;;;;;;10110:2:12;4835:85:11;;;10092:21:12;10149:2;10129:18;;;10122:30;10188:34;10168:18;;;10161:62;10259:13;10239:18;;;10232:41;10290:19;;4835:85:11;9908:407:12;4835:85:11;492:45;4992:27;;;4984:84;;;;;;;10522:2:12;4984:84:11;;;10504:21:12;10561:2;10541:18;;;10534:30;10600:34;10580:18;;;10573:62;10671:14;10651:18;;;10644:42;10703:19;;4984:84:11;10320:408:12;4984:84:11;5111:40;;;5078:23;5111:40;;;:25;;;:40;;;;;:65;5245:21;;;5241:79;;5282:27;5291:2;5295:13;5282:8;:27::i;:::-;5334:21;5329:534;5373:18;:25;5357:13;:41;5329:534;;;5431:15;5449:18;5468:13;5449:33;;;;;;;;:::i;:::-;;;;;;;;;;;;5522:39;;;5496:23;5522:39;;;;;;;;;;;:52;5449:33;;-1:-1:-1;5522:52:11;;;;;5596:32;;;;;5588:101;;;;;;;11579:2:12;5588:101:11;;;11561:21:12;11618:2;11598:18;;;11591:30;11657:34;11637:18;;;11630:62;11728:26;11708:18;;;11701:54;11772:19;;5588:101:11;11377:420:12;5588:101:11;5703:45;5718:2;5722:15;5739:8;5703:14;:45::i;:::-;7084:40;;;:29;:40;;;;;;;;;;;:85;;;;;;;;;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;7084:85;7263:69;;;;5834:18;;;;:::i;:::-;;;;5417:446;;5400:15;;;;;:::i;:::-;;;;5329:534;;5875:742;6014:1;5986:18;:25;:29;5978:85;;;;;;;10110:2:12;5978:85:11;;;10092:21:12;10149:2;10129:18;;;10122:30;10188:34;10168:18;;;10161:62;10259:13;10239:18;;;10232:41;10290:19;;5978:85:11;9908:407:12;5978:85:11;492:45;6200:27;;;;6192:94;;;;;;;12004:2:12;6192:94:11;;;11986:21:12;12043:2;12023:18;;;12016:30;12082:34;12062:18;;;12055:62;12153:24;12133:18;;;12126:52;12195:19;;6192:94:11;11802:418:12;6192:94:11;6301:21;6296:315;6340:18;:25;6324:13;:41;6296:315;;;6398:15;6416:18;6435:13;6416:33;;;;;;;;:::i;:::-;;;;;;;;;;;;6489:39;;;6463:23;6489:39;;;;;;;;;;;:52;6416:33;;-1:-1:-1;6489:52:11;;6555:45;6489:2;:52;6416:33;6555:14;:45::i;:::-;6384:227;;6367:15;;;;;:::i;:::-;;;;6296:315;;;;5968:649;5875:742;;:::o;9541:871::-;9633:19;;;9629:777;;9676:16;;:21;9668:94;;;;;;;12427:2:12;9668:94:11;;;12409:21:12;12466:2;12446:18;;;12439:30;12505:34;12485:18;;;12478:62;12576:30;12556:18;;;12549:58;12624:19;;9668:94:11;12225:424:12;9668:94:11;9541:871;;:::o;9629:777::-;9820:1;9801:9;:16;:20;9793:94;;;;;;;12856:2:12;9793:94:11;;;12838:21:12;12895:2;12875:18;;;12868:30;12934:34;12914:18;;;12907:62;13005:31;12985:18;;;12978:59;13054:19;;9793:94:11;12654:425:12;9793:94:11;9905:22;;;9922:4;9905:22;9901:134;;9947:73;9970:5;9947:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;10049:12;10063:18;10085:5;:18;;10104:9;10085:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10048:66;;;;10133:7;10128:268;;10164:12;;:16;10160:222;;10261:5;10247:21;;;;;;;;;;;:::i;10160:222::-;10315:48;;;;;13789:2:12;10315:48:11;;;13771:21:12;13828:2;13808:18;;;13801:30;13867:34;13847:18;;;13840:62;13938:8;13918:18;;;13911:36;13964:19;;10315:48:11;13587:402:12;6623:316:11;6710:77;6733:13;6710:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;6861:17;;;:24;;6797:40;;;;;;;;:25;;;;:40;;;;;;;:61;;:88;;;6895:37;;;;;;;;;;;;;;;;;;;;;6623:316::o;7345:2190::-;7472:27;;;7464:95;;;;;;;14196:2:12;7464:95:11;;;14178:21:12;14235:2;14215:18;;;14208:30;14274:34;14254:18;;;14247:62;14345:25;14325:18;;;14318:53;14388:19;;7464:95:11;13994:419:12;7464:95:11;7654:30;;;7679:4;7654:30;;7646:89;;;;;;;14620:2:12;7646:89:11;;;14602:21:12;14659:2;14639:18;;;14632:30;14698:34;14678:18;;;14671:62;14769:16;14749:18;;;14742:44;14803:19;;7646:89:11;14418:410:12;7646:89:11;7846:40;;;7819:24;7846:40;;;;;;;;;;;:65;7952:40;;;;;8020:1;7952:25;;;:40;;;;;;:65;7846;;;;;;;7819:24;7952:69;;;:::i;:::-;7921:100;;8123:20;8103:16;:40;8099:387;;8181:40;;;8159:19;8181:40;;;:25;;;:40;;;;;:80;;8240:20;;8181:80;;;;;;:::i;:::-;;;;;;;;;;;;;;8275:40;;;;;:25;;;:40;;;;;;;:76;;8181:80;;;;;;;;;;;;;;-1:-1:-1;8181:80:11;;8275:40;8334:16;;8275:76;;;;;;:::i;:::-;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;8380:43;;;;;;;;;;;;;:95;;;;;;;;;;;;8099:387;8531:40;;;;;;;:25;;;:40;;;;;:64;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8612:40;;;;;;;;;;;8605:47;8747:25;8743:786;;8914:17;;;:24;8879:32;;8914:28;;8941:1;;8914:28;:::i;:::-;8987:40;;;8956:28;8987:40;;;:25;;;;:40;;;;;;:61;;8879:63;;-1:-1:-1;9066:48:11;;;9062:338;;9134:24;9161:2;:17;;9179:24;9161:43;;;;;;;;:::i;:::-;;;;;;;;;;;9222:17;;;:39;;9161:43;;;;;-1:-1:-1;9161:43:11;;9240:20;;9222:39;;;;;;:::i;:::-;;;;;;;;;;;;;:58;;;;;;;;;;;9298:43;;;;;;-1:-1:-1;9298:25:11;;;:43;;;;;;:64;:87;;;9062:338;9413:2;:17;;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;9457:40;;;;9413:23;9457:25;;;:40;;;;;;:61;9450:68;-1:-1:-1;;7446:2089:11;;7345:2190;;;:::o;10418:261::-;10591:22;;10658:13;10640:16;10632:40;;;;;;;;;;;;;:::i;14:196:12:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:347::-;266:8;276:6;330:3;323:4;315:6;311:17;307:27;297:55;;348:1;345;338:12;297:55;-1:-1:-1;371:20:12;;414:18;403:30;;400:50;;;446:1;443;436:12;400:50;483:4;475:6;471:17;459:29;;535:3;528:4;519:6;511;507:19;503:30;500:39;497:59;;;552:1;549;542:12;497:59;215:347;;;;;:::o;567:1009::-;709:6;717;725;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;850:9;837:23;879:18;920:2;912:6;909:14;906:34;;;936:1;933;926:12;906:34;974:6;963:9;959:22;949:32;;1019:7;1012:4;1008:2;1004:13;1000:27;990:55;;1041:1;1038;1031:12;990:55;1081:2;1068:16;1107:2;1099:6;1096:14;1093:34;;;1123:1;1120;1113:12;1093:34;1178:7;1171:4;1161:6;1158:1;1154:14;1150:2;1146:23;1142:34;1139:47;1136:67;;;1199:1;1196;1189:12;1136:67;1230:4;1226:2;1222:13;1212:23;;1254:6;1244:16;;;1279:40;1313:4;1302:9;1298:20;1279:40;:::i;:::-;1269:50;;1372:2;1361:9;1357:18;1344:32;1328:48;;1401:2;1391:8;1388:16;1385:36;;;1417:1;1414;1407:12;1385:36;;1456:60;1508:7;1497:8;1486:9;1482:24;1456:60;:::i;:::-;567:1009;;;;-1:-1:-1;567:1009:12;;-1:-1:-1;1535:8:12;;1430:86;567:1009;-1:-1:-1;;;567:1009:12:o;1581:184::-;1633:77;1630:1;1623:88;1730:4;1727:1;1720:15;1754:4;1751:1;1744:15;1770:253;1842:2;1836:9;1884:4;1872:17;;1919:18;1904:34;;1940:22;;;1901:62;1898:88;;;1966:18;;:::i;:::-;2002:2;1995:22;1770:253;:::o;2028:334::-;2099:2;2093:9;2155:2;2145:13;;2160:66;2141:86;2129:99;;2258:18;2243:34;;2279:22;;;2240:62;2237:88;;;2305:18;;:::i;:::-;2341:2;2334:22;2028:334;;-1:-1:-1;2028:334:12:o;2367:191::-;2435:4;2468:18;2460:6;2457:30;2454:56;;;2490:18;;:::i;:::-;-1:-1:-1;2535:1:12;2531:14;2547:4;2527:25;;2367:191::o;2563:2769::-;2731:9;2766:72;2782:55;2830:6;2782:55;:::i;:::-;2766:72;:::i;:::-;2872:19;;;2910:4;2930:12;;;;2860:3;2961:1;2996:15;;;2985:27;;3035:14;3024:26;;3021:46;;;3063:1;3060;3053:12;3021:46;3087:5;3101:2198;3117:6;3112:3;3109:15;3101:2198;;;3203:3;3190:17;3230:18;3280:2;3267:11;3264:19;3261:109;;;3324:1;3353:2;3349;3342:14;3261:109;3404:11;3397:5;3393:23;3383:33;;3461:4;3456:2;3440:14;3436:23;3432:34;3429:124;;;3507:1;3536:2;3532;3525:14;3429:124;3581:22;;:::i;:::-;3632;3651:2;3632:22;:::i;:::-;3623:7;3616:39;3704:2;3700;3696:11;3683:25;3743:1;3734:7;3731:14;3721:112;;3787:1;3816:2;3812;3805:14;3721:112;3853:16;;;3846:33;3902:2;3944:11;;;3931:25;3972:14;;;3969:104;;;4027:1;4056:2;4052;4045:14;3969:104;4097:15;;;;;4155:14;4148:4;4139:14;;4135:35;4125:136;;4213:1;4202:12;;4243:3;4238;4231:16;4125:136;4298:3;4285:17;4274:28;;4328:69;4344:52;4392:3;4344:52;:::i;4328:69::-;4441:18;;;4537:12;;;4528:22;;4524:31;;;4481:14;;;;4584;4571:28;;4568:121;;;4641:1;4671:3;4666;4659:16;4568:121;4715:12;;;;4740:440;4758:8;4751:5;4748:19;4740:440;;;4854:5;4841:19;4912:66;4903:7;4899:80;4890:7;4887:93;4877:210;;5031:1;5065:3;5060;5053:16;4877:210;5104:22;;4779:14;;;;5152;;;;4740:440;;;5200:16;;;5193:31;;;;-1:-1:-1;5237:20:12;;-1:-1:-1;;5277:12:12;;;;3134;;3101:2198;;;-1:-1:-1;5321:5:12;;2563:2769;-1:-1:-1;;;;;;;2563:2769:12:o;5740:184::-;5792:77;5789:1;5782:88;5889:4;5886:1;5879:15;5913:4;5910:1;5903:15;5929:184;5981:77;5978:1;5971:88;6078:4;6075:1;6068:15;6102:4;6099:1;6092:15;6526:184;6578:77;6575:1;6568:88;6675:4;6672:1;6665:15;6699:4;6696:1;6689:15;6715:195;6754:3;6785:66;6778:5;6775:77;6772:103;;;6855:18;;:::i;:::-;-1:-1:-1;6902:1:12;6891:13;;6715:195::o;7047:258::-;7119:1;7129:113;7143:6;7140:1;7137:13;7129:113;;;7219:11;;;7213:18;7200:11;;;7193:39;7165:2;7158:10;7129:113;;;7260:6;7257:1;7254:13;7251:48;;;-1:-1:-1;;7295:1:12;7277:16;;7270:27;7047:258::o;7310:316::-;7351:3;7389:5;7383:12;7416:6;7411:3;7404:19;7432:63;7488:6;7481:4;7476:3;7472:14;7465:4;7458:5;7454:16;7432:63;:::i;:::-;7540:2;7528:15;7545:66;7524:88;7515:98;;;;7615:4;7511:109;;7310:316;-1:-1:-1;;7310:316:12:o;7631:2272::-;7897:4;7926:2;7966;7955:9;7951:18;7996:2;7985:9;7978:21;8019:6;8054;8048:13;8085:6;8077;8070:22;8111:3;8101:13;;8145:2;8134:9;8130:18;8123:25;;8207:2;8197:6;8194:1;8190:14;8179:9;8175:30;8171:39;8229:4;8268:2;8260:6;8256:15;8289:1;8299:1433;8313:6;8310:1;8307:13;8299:1433;;;8402:66;8390:9;8382:6;8378:22;8374:95;8369:3;8362:108;8499:6;8493:13;8545:2;8537:6;8533:15;8591:42;8586:2;8580:9;8576:58;8568:6;8561:74;8682:2;8678;8674:11;8668:18;8726:1;8712:12;8709:19;8699:227;;8770:77;8767:1;8760:88;8875:4;8872:1;8865:15;8907:4;8904:1;8897:15;8699:227;8946:15;;;8939:37;8999:4;9044:11;;;9038:18;9076:15;;;9069:27;;;9157:21;;9191:24;;;;9281:23;;;;-1:-1:-1;;9237:15:12;;;;9342:282;9358:8;9353:3;9350:17;9342:282;;;9439:15;;9456:66;9435:88;9421:103;;9593:17;;;;9386:1;9377:11;;;;;9550:14;;;;9342:282;;;-1:-1:-1;9710:12:12;;;;9647:5;-1:-1:-1;;;9675:15:12;;;;8335:1;8328:9;8299:1433;;;-1:-1:-1;;6992:42:12;6981:54;;9768:18;;;6969:67;9825:22;;;9818:4;9803:20;;9796:52;9865:32;9829:6;9882;9865:32;:::i;:::-;9857:40;7631:2272;-1:-1:-1;;;;;;;;;;7631:2272:12:o;11155:217::-;11193:3;11221:26;11282:2;11275:5;11271:14;11309:2;11300:7;11297:15;11294:41;;;11315:18;;:::i;:::-;11364:1;11351:15;;11155:217;-1:-1:-1;;;11155:217:12:o;13084:274::-;13213:3;13251:6;13245:13;13267:53;13313:6;13308:3;13301:4;13293:6;13289:17;13267:53;:::i;:::-;13336:16;;;;;13084:274;-1:-1:-1;;13084:274:12:o;13363:219::-;13512:2;13501:9;13494:21;13475:4;13532:44;13572:2;13561:9;13557:18;13549:6;13532:44;:::i;:::-;13524:52;13363:219;-1:-1:-1;;;13363:219:12:o;14833:125::-;14873:4;14901:1;14898;14895:8;14892:34;;;14906:18;;:::i;:::-;-1:-1:-1;14943:9:12;;14833:125::o;14963:184::-;15015:77;15012:1;15005:88;15112:4;15109:1;15102:15;15136:4;15133:1;15126:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "1489200", - "executionCost": "1555", - "totalCost": "1490755" - }, - "external": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": "infinite" - } - }, - "methodIdentifiers": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": "1f931c1c" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"diamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Add/replace/remove any number of functions and optionally execute a function with delegatecall\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/facets/DiamondCutFacet.sol\":\"DiamondCutFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/facets/DiamondCutFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\",\"keccak256\":\"0x58fc18b268fa5d1956c0e677f3fe91e2dd9d86fc73bb43527110d8afbbcd733e\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": { - "notice": "Add/replace/remove any number of functions and optionally execute a function with delegatecall" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9" -} \ No newline at end of file diff --git a/extendedArtifacts/DiamondERC165Init.json b/extendedArtifacts/DiamondERC165Init.json deleted file mode 100644 index 02541cc..0000000 --- a/extendedArtifacts/DiamondERC165Init.json +++ /dev/null @@ -1,1549 +0,0 @@ -{ - "contractName": "DiamondERC165Init", - "sourceName": "solc_0.8/diamond/initializers/DiamondERC165Init.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "interfaceIds", - "type": "bytes4[]" - }, - { - "internalType": "bytes4[]", - "name": "interfaceIdsToRemove", - "type": "bytes4[]" - } - ], - "name": "setERC165", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5061041e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80632a84809114610030575b600080fd5b61004361003e3660046102a4565b610045565b005b7f01ffc9a70000000000000000000000000000000000000000000000000000000060009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f6020527f699d9daa71b280d05a152715774afa0a81a312594b2d731d6b0b2552b7d6f69f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c905b848110156101a457600182600301600088888581811061011e5761011e610310565b9050602002016020810190610133919061033f565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558061019c81610388565b9150506100fc565b5060005b828110156102505760008260030160008686858181106101ca576101ca610310565b90506020020160208101906101df919061033f565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558061024881610388565b9150506101a8565b505050505050565b60008083601f84011261026a57600080fd5b50813567ffffffffffffffff81111561028257600080fd5b6020830191508360208260051b850101111561029d57600080fd5b9250929050565b600080600080604085870312156102ba57600080fd5b843567ffffffffffffffff808211156102d257600080fd5b6102de88838901610258565b909650945060208701359150808211156102f757600080fd5b5061030487828801610258565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561035157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461038157600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156103e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea264697066735822122089ec289e8a22b626b334a083bad15a54a94f6bb0677c64dd693ce4bbd20ff34664736f6c634300080a0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80632a84809114610030575b600080fd5b61004361003e3660046102a4565b610045565b005b7f01ffc9a70000000000000000000000000000000000000000000000000000000060009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f6020527f699d9daa71b280d05a152715774afa0a81a312594b2d731d6b0b2552b7d6f69f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c905b848110156101a457600182600301600088888581811061011e5761011e610310565b9050602002016020810190610133919061033f565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558061019c81610388565b9150506100fc565b5060005b828110156102505760008260030160008686858181106101ca576101ca610310565b90506020020160208101906101df919061033f565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558061024881610388565b9150506101a8565b505050505050565b60008083601f84011261026a57600080fd5b50813567ffffffffffffffff81111561028257600080fd5b6020830191508360208260051b850101111561029d57600080fd5b9250929050565b600080600080604085870312156102ba57600080fd5b843567ffffffffffffffff808211156102d257600080fd5b6102de88838901610258565b909650945060208701359150808211156102f757600080fd5b5061030487828801610258565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561035157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461038157600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156103e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea264697066735822122089ec289e8a22b626b334a083bad15a54a94f6bb0677c64dd693ce4bbd20ff34664736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "setERC165(bytes4[],bytes4[])": { - "params": { - "interfaceIds": "list of interface id to set as supported", - "interfaceIdsToRemove": "list of interface id to unset as supported. Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array." - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41E DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2A848091 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x2A4 JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131F PUSH1 0x20 MSTORE PUSH32 0x699D9DAA71B280D05A152715774AFA0A81A312594B2D731D6B0B2552B7D6F69F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP9 DUP9 DUP6 DUP2 DUP2 LT PUSH2 0x11E JUMPI PUSH2 0x11E PUSH2 0x310 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x133 SWAP2 SWAP1 PUSH2 0x33F JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 PUSH2 0x19C DUP2 PUSH2 0x388 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xFC JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x250 JUMPI PUSH1 0x0 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x1CA JUMPI PUSH2 0x1CA PUSH2 0x310 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1DF SWAP2 SWAP1 PUSH2 0x33F JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 PUSH2 0x248 DUP2 PUSH2 0x388 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1A8 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DE DUP9 DUP4 DUP10 ADD PUSH2 0x258 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x304 DUP8 DUP3 DUP9 ADD PUSH2 0x258 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x3E1 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 0xEC 0x28 SWAP15 DUP11 0x22 0xB6 0x26 0xB3 CALLVALUE LOG0 DUP4 0xBA 0xD1 GAS SLOAD 0xA9 0x4F PUSH12 0xB0677C64DD693CE4BBD20FF3 CHAINID PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "165:902:6:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@setERC165_643": { - "entryPoint": 69, - "id": 643, - "parameterSlots": 4, - "returnSlots": 0 - }, - "abi_decode_array_bytes4_dyn_calldata": { - "entryPoint": 600, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_array$_t_bytes4_$dyn_calldata_ptrt_array$_t_bytes4_$dyn_calldata_ptr": { - "entryPoint": 676, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_bytes4": { - "entryPoint": 831, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "increment_t_uint256": { - "entryPoint": 904, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x32": { - "entryPoint": 784, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:2036:12", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:12", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "97:283:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "146:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "155:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "158:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "148:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "148:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "148:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "125:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "133:4:12", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "121:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "121:17:12" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "140:3:12" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "117:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "117:27:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "110:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "110:35:12" - }, - "nodeType": "YulIf", - "src": "107:55:12" - }, - { - "nodeType": "YulAssignment", - "src": "171:30:12", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "194:6:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "181:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "181:20:12" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "171:6:12" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "244:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "253:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "256:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "246:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "246:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "246:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "216:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "224:18:12", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "213:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "213:30:12" - }, - "nodeType": "YulIf", - "src": "210:50:12" - }, - { - "nodeType": "YulAssignment", - "src": "269:29:12", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "285:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "293:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "281:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "281:17:12" - }, - "variableNames": [ - { - "name": "arrayPos", - "nodeType": "YulIdentifier", - "src": "269:8:12" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "358:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "367:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "370:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "360:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "360:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "360:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "321:6:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "333:1:12", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "336:6:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "329:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "329:14:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "317:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "317:27:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "346:4:12", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "313:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "313:38:12" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "353:3:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "310:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "310:47:12" - }, - "nodeType": "YulIf", - "src": "307:67:12" - } - ] - }, - "name": "abi_decode_array_bytes4_dyn_calldata", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "60:6:12", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "68:3:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "arrayPos", - "nodeType": "YulTypedName", - "src": "76:8:12", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "86:6:12", - "type": "" - } - ], - "src": "14:366:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "540:614:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "586:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "595:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "598:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "588:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "588:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "588:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "561:7:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "570:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "557:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "557:23:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "582:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "553:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "553:32:12" - }, - "nodeType": "YulIf", - "src": "550:52:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "611:37:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "638:9:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "625:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "625:23:12" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "615:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "657:28:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "667:18:12", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "661:2:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "712:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "721:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "724:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "714:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "714:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "714:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "700:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "708:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "697:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "697:14:12" - }, - "nodeType": "YulIf", - "src": "694:34:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "737:95:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "804:9:12" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "815:6:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "800:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "800:22:12" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "824:7:12" - } - ], - "functionName": { - "name": "abi_decode_array_bytes4_dyn_calldata", - "nodeType": "YulIdentifier", - "src": "763:36:12" - }, - "nodeType": "YulFunctionCall", - "src": "763:69:12" - }, - "variables": [ - { - "name": "value0_1", - "nodeType": "YulTypedName", - "src": "741:8:12", - "type": "" - }, - { - "name": "value1_1", - "nodeType": "YulTypedName", - "src": "751:8:12", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "841:18:12", - "value": { - "name": "value0_1", - "nodeType": "YulIdentifier", - "src": "851:8:12" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "841:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "868:18:12", - "value": { - "name": "value1_1", - "nodeType": "YulIdentifier", - "src": "878:8:12" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "868:6:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "895:48:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "928:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "939:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "924:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "924:18:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "911:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "911:32:12" - }, - "variables": [ - { - "name": "offset_1", - "nodeType": "YulTypedName", - "src": "899:8:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "972:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "981:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "984:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "974:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "974:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "974:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "958:8:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "968:2:12" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "955:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "955:16:12" - }, - "nodeType": "YulIf", - "src": "952:36:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "997:97:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1064:9:12" - }, - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "1075:8:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1060:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1060:24:12" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1086:7:12" - } - ], - "functionName": { - "name": "abi_decode_array_bytes4_dyn_calldata", - "nodeType": "YulIdentifier", - "src": "1023:36:12" - }, - "nodeType": "YulFunctionCall", - "src": "1023:71:12" - }, - "variables": [ - { - "name": "value2_1", - "nodeType": "YulTypedName", - "src": "1001:8:12", - "type": "" - }, - { - "name": "value3_1", - "nodeType": "YulTypedName", - "src": "1011:8:12", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1103:18:12", - "value": { - "name": "value2_1", - "nodeType": "YulIdentifier", - "src": "1113:8:12" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1103:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1130:18:12", - "value": { - "name": "value3_1", - "nodeType": "YulIdentifier", - "src": "1140:8:12" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "1130:6:12" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_bytes4_$dyn_calldata_ptrt_array$_t_bytes4_$dyn_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "482:9:12", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "493:7:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "505:6:12", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "513:6:12", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "521:6:12", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "529:6:12", - "type": "" - } - ], - "src": "385:769:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1191:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1208:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1211:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1201:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1201:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1201:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1305:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1308:4:12", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1298:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1298:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1298:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1329:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1332:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1322:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1322:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1322:15:12" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "1159:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1417:263:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1463:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1472:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1475:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1465:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1465:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1465:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1438:7:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1447:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1434:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1434:23:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1459:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1430:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1430:32:12" - }, - "nodeType": "YulIf", - "src": "1427:52:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1488:36:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1514:9:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1501:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "1501:23:12" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1492:5:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1634:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1643:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1646:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1636:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1636:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1636:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1546:5:12" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1557:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1564:66:12", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1553:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1553:78:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1543:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1543:89:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1536:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1536:97:12" - }, - "nodeType": "YulIf", - "src": "1533:117:12" - }, - { - "nodeType": "YulAssignment", - "src": "1659:15:12", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1669:5:12" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1659:6:12" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes4", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1383:9:12", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1394:7:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1406:6:12", - "type": "" - } - ], - "src": "1348:332:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1732:302:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1831:168:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1852:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1855:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1845:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1845:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1845:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1953:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1956:4:12", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1946:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1946:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1946:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1981:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1984:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1974:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1974:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1974:15:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1748:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1755:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1745:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1745:77:12" - }, - "nodeType": "YulIf", - "src": "1742:257:12" - }, - { - "nodeType": "YulAssignment", - "src": "2008:20:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2019:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2026:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2015:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2015:13:12" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "2008:3:12" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1714:5:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "1724:3:12", - "type": "" - } - ], - "src": "1685:349:12" - } - ] - }, - "contents": "{\n { }\n function abi_decode_array_bytes4_dyn_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_array$_t_bytes4_$dyn_calldata_ptrt_array$_t_bytes4_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_array_bytes4_dyn_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n let offset_1 := calldataload(add(headStart, 32))\n if gt(offset_1, _1) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_array_bytes4_dyn_calldata(add(headStart, offset_1), dataEnd)\n value2 := value2_1\n value3 := value3_1\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value0 := value\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n ret := add(value, 1)\n }\n}", - "id": 12, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2A848091 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x3E CALLDATASIZE PUSH1 0x4 PUSH2 0x2A4 JUMP JUMPDEST PUSH2 0x45 JUMP JUMPDEST STOP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131F PUSH1 0x20 MSTORE PUSH32 0x699D9DAA71B280D05A152715774AFA0A81A312594B2D731D6B0B2552B7D6F69F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1A4 JUMPI PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP9 DUP9 DUP6 DUP2 DUP2 LT PUSH2 0x11E JUMPI PUSH2 0x11E PUSH2 0x310 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x133 SWAP2 SWAP1 PUSH2 0x33F JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 PUSH2 0x19C DUP2 PUSH2 0x388 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xFC JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x250 JUMPI PUSH1 0x0 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x1CA JUMPI PUSH2 0x1CA PUSH2 0x310 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1DF SWAP2 SWAP1 PUSH2 0x33F JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 PUSH2 0x248 DUP2 PUSH2 0x388 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1A8 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DE DUP9 DUP4 DUP10 ADD PUSH2 0x258 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x304 DUP8 DUP3 DUP9 ADD PUSH2 0x258 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x381 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x3E1 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP10 0xEC 0x28 SWAP15 DUP11 0x22 0xB6 0x26 0xB3 CALLVALUE LOG0 DUP4 0xBA 0xD1 GAS SLOAD 0xA9 0x4F PUSH12 0xB0677C64DD693CE4BBD20FF3 CHAINID PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "165:902:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;536:529;;;;;;:::i;:::-;;:::i;:::-;;;746:25;646:36;723:49;;;:22;:49;;;:56;;;;775:4;723:56;;;492:45:11;;790:121:6;810:23;;;790:121;;;896:4;854:2;:22;;:39;877:12;;890:1;877:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;854:39;;;;;;;;;;;;;-1:-1:-1;854:39:6;:46;;;;;;;;;;;;;835:3;;;;:::i;:::-;;;;790:121;;;;926:9;921:138;941:31;;;921:138;;;1043:5;993:2;:22;;:47;1016:20;;1037:1;1016:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;993:47;;;;;;;;;;;;;-1:-1:-1;993:47:6;:55;;;;;;;;;;;;;974:3;;;;:::i;:::-;;;;921:138;;;;636:429;536:529;;;;:::o;14:366:12:-;76:8;86:6;140:3;133:4;125:6;121:17;117:27;107:55;;158:1;155;148:12;107:55;-1:-1:-1;181:20:12;;224:18;213:30;;210:50;;;256:1;253;246:12;210:50;293:4;285:6;281:17;269:29;;353:3;346:4;336:6;333:1;329:14;321:6;317:27;313:38;310:47;307:67;;;370:1;367;360:12;307:67;14:366;;;;;:::o;385:769::-;505:6;513;521;529;582:2;570:9;561:7;557:23;553:32;550:52;;;598:1;595;588:12;550:52;638:9;625:23;667:18;708:2;700:6;697:14;694:34;;;724:1;721;714:12;694:34;763:69;824:7;815:6;804:9;800:22;763:69;:::i;:::-;851:8;;-1:-1:-1;737:95:12;-1:-1:-1;939:2:12;924:18;;911:32;;-1:-1:-1;955:16:12;;;952:36;;;984:1;981;974:12;952:36;;1023:71;1086:7;1075:8;1064:9;1060:24;1023:71;:::i;:::-;385:769;;;;-1:-1:-1;1113:8:12;-1:-1:-1;;;;385:769:12:o;1159:184::-;1211:77;1208:1;1201:88;1308:4;1305:1;1298:15;1332:4;1329:1;1322:15;1348:332;1406:6;1459:2;1447:9;1438:7;1434:23;1430:32;1427:52;;;1475:1;1472;1465:12;1427:52;1514:9;1501:23;1564:66;1557:5;1553:78;1546:5;1543:89;1533:117;;1646:1;1643;1636:12;1533:117;1669:5;1348:332;-1:-1:-1;;;1348:332:12:o;1685:349::-;1724:3;1755:66;1748:5;1745:77;1742:257;;;1855:77;1852:1;1845:88;1956:4;1953:1;1946:15;1984:4;1981:1;1974:15;1742:257;-1:-1:-1;2026:1:12;2015:13;;1685:349::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "210800", - "executionCost": "251", - "totalCost": "211051" - }, - "external": { - "setERC165(bytes4[],bytes4[])": "infinite" - } - }, - "methodIdentifiers": { - "setERC165(bytes4[],bytes4[])": "2a848091" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"interfaceIds\",\"type\":\"bytes4[]\"},{\"internalType\":\"bytes4[]\",\"name\":\"interfaceIdsToRemove\",\"type\":\"bytes4[]\"}],\"name\":\"setERC165\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"setERC165(bytes4[],bytes4[])\":{\"params\":{\"interfaceIds\":\"list of interface id to set as supported\",\"interfaceIdsToRemove\":\"list of interface id to unset as supported. Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setERC165(bytes4[],bytes4[])\":{\"notice\":\"set or unset ERC165 using DiamondStorage.supportedInterfaces\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/initializers/DiamondERC165Init.sol\":\"DiamondERC165Init\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/initializers/DiamondERC165Init.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x71a7a882fb6ee26dbfd70ec75d230f6336d2dd05db7e480168aadb53f216ae4b\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x7541f7408d0f74162bc4664d5e012427f2ceaab2abadca0353269ef15ee03d8b\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "setERC165(bytes4[],bytes4[])": { - "notice": "set or unset ERC165 using DiamondStorage.supportedInterfaces" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9" -} \ No newline at end of file diff --git a/extendedArtifacts/DiamondLoupeFacet.json b/extendedArtifacts/DiamondLoupeFacet.json deleted file mode 100644 index f78d766..0000000 --- a/extendedArtifacts/DiamondLoupeFacet.json +++ /dev/null @@ -1,3176 +0,0 @@ -{ - "contractName": "DiamondLoupeFacet", - "sourceName": "solc_0.8/diamond/facets/DiamondLoupeFacet.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5061084e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80637a0ed627116100505780637a0ed627146100fa578063adfca15e1461010f578063cdffacc61461012f57600080fd5b806301ffc9a71461006c57806352ef6b2c146100e5575b600080fd5b6100d061007a366004610569565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100ed6101cb565b6040516100dc91906105b2565b61010261025d565b6040516100dc9190610669565b61012261011d366004610711565b610469565b6040516100dc9190610747565b6101a661013d366004610569565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100dc565b606060007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6002810180546040805160208084028201810190925282815293945083018282801561025257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610227575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e546060907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c908067ffffffffffffffff8111156102bd576102bd61075a565b60405190808252806020026020018201604052801561030357816020015b6040805180820190915260008152606060208201528152602001906001900390816102db5790505b50925060005b8181101561046357600083600201828154811061032857610328610789565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508085838151811061036857610368610789565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561042957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116103d65790505b505050505085838151811061044057610440610789565b60200260200101516020018190525050808061045b906107b8565b915050610309565b50505090565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d602090815260409182902080548351818402810184019094528084526060937fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092919083018282801561055c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116105095790505b5050505050915050919050565b60006020828403121561057b57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146105ab57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561060057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016105ce565b50909695505050505050565b600081518084526020808501945080840160005b8381101561065e5781517fffffffff000000000000000000000000000000000000000000000000000000001687529582019590820190600101610620565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610703578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff1684528701518784018790526106f08785018261060c565b9588019593505090860190600101610690565b509098975050505050505050565b60006020828403121561072357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146105ab57600080fd5b6020815260006105ab602083018461060c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610811577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220d2f6c23b0c64effd7424eb9da8e13cc0a62fab9990643ce1a7bc54f830cc768464736f6c634300080a0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80637a0ed627116100505780637a0ed627146100fa578063adfca15e1461010f578063cdffacc61461012f57600080fd5b806301ffc9a71461006c57806352ef6b2c146100e5575b600080fd5b6100d061007a366004610569565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100ed6101cb565b6040516100dc91906105b2565b61010261025d565b6040516100dc9190610669565b61012261011d366004610711565b610469565b6040516100dc9190610747565b6101a661013d366004610569565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100dc565b606060007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6002810180546040805160208084028201810190925282815293945083018282801561025257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610227575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e546060907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c908067ffffffffffffffff8111156102bd576102bd61075a565b60405190808252806020026020018201604052801561030357816020015b6040805180820190915260008152606060208201528152602001906001900390816102db5790505b50925060005b8181101561046357600083600201828154811061032857610328610789565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508085838151811061036857610368610789565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561042957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116103d65790505b505050505085838151811061044057610440610789565b60200260200101516020018190525050808061045b906107b8565b915050610309565b50505090565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d602090815260409182902080548351818402810184019094528084526060937fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092919083018282801561055c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116105095790505b5050505050915050919050565b60006020828403121561057b57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146105ab57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561060057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016105ce565b50909695505050505050565b600081518084526020808501945080840160005b8381101561065e5781517fffffffff000000000000000000000000000000000000000000000000000000001687529582019590820190600101610620565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610703578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff1684528701518784018790526106f08785018261060c565b9588019593505090860190600101610690565b509098975050505050505050565b60006020828403121561072357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146105ab57600080fd5b6020815260006105ab602083018461060c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610811577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220d2f6c23b0c64effd7424eb9da8e13cc0a62fab9990643ce1a7bc54f830cc768464736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "facetAddress(bytes4)": { - "details": "If facet is not found return address(0).", - "params": { - "_functionSelector": "The function selector." - }, - "returns": { - "facetAddress_": "The facet address." - } - }, - "facetAddresses()": { - "returns": { - "facetAddresses_": "facetAddresses_" - } - }, - "facetFunctionSelectors(address)": { - "params": { - "_facet": "The facet address." - }, - "returns": { - "facetFunctionSelectors_": "facetFunctionSelectors_" - } - }, - "facets()": { - "returns": { - "facets_": "Facet" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x84E DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A0ED627 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x7A0ED627 EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xADFCA15E EQ PUSH2 0x10F JUMPI DUP1 PUSH4 0xCDFFACC6 EQ PUSH2 0x12F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x52EF6B2C EQ PUSH2 0xE5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD0 PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x569 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xED PUSH2 0x1CB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDC SWAP2 SWAP1 PUSH2 0x5B2 JUMP JUMPDEST PUSH2 0x102 PUSH2 0x25D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDC SWAP2 SWAP1 PUSH2 0x669 JUMP JUMPDEST PUSH2 0x122 PUSH2 0x11D CALLDATASIZE PUSH1 0x4 PUSH2 0x711 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDC SWAP2 SWAP1 PUSH2 0x747 JUMP JUMPDEST PUSH2 0x1A6 PUSH2 0x13D CALLDATASIZE PUSH1 0x4 PUSH2 0x569 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDC JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x252 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x227 JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131E SLOAD PUSH1 0x60 SWAP1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2BD JUMPI PUSH2 0x2BD PUSH2 0x75A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x303 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2DB JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x463 JUMPI PUSH1 0x0 DUP4 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x328 JUMPI PUSH2 0x328 PUSH2 0x789 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x368 JUMPI PUSH2 0x368 PUSH2 0x789 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP1 MSTORE SWAP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x429 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x3D6 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x440 JUMPI PUSH2 0x440 PUSH2 0x789 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x45B SWAP1 PUSH2 0x7B8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x309 JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x55C JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x509 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x57B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x5AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x600 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5CE JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x65E JUMPI DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x620 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x703 JUMPI DUP9 DUP4 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE DUP8 ADD MLOAD DUP8 DUP5 ADD DUP8 SWAP1 MSTORE PUSH2 0x6F0 DUP8 DUP6 ADD DUP3 PUSH2 0x60C JUMP JUMPDEST SWAP6 DUP9 ADD SWAP6 SWAP4 POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x690 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x723 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x5AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x5AB PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x60C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x811 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 0xF6 0xC2 EXTCODESIZE 0xC PUSH5 0xEFFD7424EB SWAP14 0xA8 0xE1 EXTCODECOPY 0xC0 0xA6 0x2F 0xAB SWAP10 SWAP1 PUSH5 0x3CE1A7BC54 0xF8 ADDRESS 0xCC PUSH23 0x8464736F6C634300080A00330000000000000000000000 ", - "sourceMap": "539:2484:3:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@facetAddress_339": { - "entryPoint": null, - "id": 339, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@facetAddresses_312": { - "entryPoint": 459, - "id": 312, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@facetFunctionSelectors_289": { - "entryPoint": 1129, - "id": 289, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@facets_261": { - "entryPoint": 605, - "id": 261, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@supportsInterface_362": { - "entryPoint": null, - "id": 362, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 1809, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes4": { - "entryPoint": 1385, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_array_bytes4_dyn": { - "entryPoint": 1548, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1458, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1863, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1641, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "increment_t_uint256": { - "entryPoint": 1976, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x32": { - "entryPoint": 1929, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1882, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4422:12", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:12", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "83:263:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "129:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "138:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "141:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "131:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "131:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "131:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "104:7:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "113:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "100:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "100:23:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "125:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "96:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "96:32:12" - }, - "nodeType": "YulIf", - "src": "93:52:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "154:36:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "180:9:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "167:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "167:23:12" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "158:5:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "300:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "302:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "302:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "212:5:12" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "223:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "230:66:12", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "219:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "219:78:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "209:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "209:89:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "202:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "202:97:12" - }, - "nodeType": "YulIf", - "src": "199:117:12" - }, - { - "nodeType": "YulAssignment", - "src": "325:15:12", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "335:5:12" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "325:6:12" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes4", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "49:9:12", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "60:7:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "72:6:12", - "type": "" - } - ], - "src": "14:332:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "446:92:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "456:26:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "468:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "479:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "464:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "464:18:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "456:4:12" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "498:9:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "523:6:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "516:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "516:14:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "509:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "509:22:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "491:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "491:41:12" - }, - "nodeType": "YulExpressionStatement", - "src": "491:41:12" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "415:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "426:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "437:4:12", - "type": "" - } - ], - "src": "351:187:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "694:530:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "704:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "714:2:12", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "708:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "725:32:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "743:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "754:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "739:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "739:18:12" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "729:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "773:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "784:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "766:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "766:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "766:21:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "796:17:12", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "807:6:12" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "800:3:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "822:27:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "842:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "836:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "836:13:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "826:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "865:6:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "873:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "858:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "858:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "858:22:12" - }, - { - "nodeType": "YulAssignment", - "src": "889:25:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "900:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "911:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "896:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "896:18:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "889:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "923:29:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "941:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "949:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "937:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "937:15:12" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "927:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "961:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "970:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "965:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1029:169:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1050:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1065:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1059:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "1059:13:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1074:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1055:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1055:62:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1043:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1043:75:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1043:75:12" - }, - { - "nodeType": "YulAssignment", - "src": "1131:19:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1142:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1147:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1138:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1138:12:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1131:3:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1163:25:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1177:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1185:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1173:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1173:15:12" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1163:6:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "991:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "994:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "988:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "988:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1002:18:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1004:14:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1013:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1016:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1009:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1009:9:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1004:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "984:3:12", - "statements": [] - }, - "src": "980:218:12" - }, - { - "nodeType": "YulAssignment", - "src": "1207:11:12", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1215:3:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1207:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "663:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "674:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "685:4:12", - "type": "" - } - ], - "src": "543:681:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1289:447:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1299:26:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1319:5:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1313:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "1313:12:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1303:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1341:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1346:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1334:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1334:19:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1334:19:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1362:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1372:4:12", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1366:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1385:19:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1396:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1401:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1392:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1392:12:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1385:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1413:28:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1431:5:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1438:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1427:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1427:14:12" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "1417:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1450:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1459:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1454:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1518:193:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1539:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1554:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1548:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "1548:13:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1563:66:12", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1544:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1544:86:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1532:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1532:99:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1532:99:12" - }, - { - "nodeType": "YulAssignment", - "src": "1644:19:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1655:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1660:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1651:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1651:12:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1644:3:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1676:25:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1690:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1698:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1686:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1686:15:12" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1676:6:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1480:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1483:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1477:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1477:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1491:18:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1493:14:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1502:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1505:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1498:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1498:9:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1493:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1473:3:12", - "statements": [] - }, - "src": "1469:242:12" - }, - { - "nodeType": "YulAssignment", - "src": "1720:10:12", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1727:3:12" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1720:3:12" - } - ] - } - ] - }, - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1266:5:12", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1273:3:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1281:3:12", - "type": "" - } - ], - "src": "1229:507:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1936:944:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1946:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1956:2:12", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1950:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1967:32:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1985:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1996:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1981:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1981:18:12" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "1971:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2015:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2026:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2008:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2008:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2008:21:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2038:17:12", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "2049:6:12" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2042:3:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2064:27:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2084:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2078:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "2078:13:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2068:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "2107:6:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2115:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2100:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2100:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2100:22:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2131:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2141:2:12", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "2135:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2152:25:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2163:9:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2174:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2159:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2159:18:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2152:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2186:53:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2208:9:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2223:1:12", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2226:6:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2219:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2219:14:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2204:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2204:30:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2236:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2200:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2200:39:12" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "2190:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2248:29:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2266:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2274:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2262:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2262:15:12" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "2252:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2286:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2295:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2290:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2354:497:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2375:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2388:6:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2396:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2384:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2384:22:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2408:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2380:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2380:95:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2368:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2368:108:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2368:108:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2489:23:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "2505:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2499:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "2499:13:12" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "2493:2:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2532:6:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2550:2:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2544:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "2544:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2555:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2540:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2540:58:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2525:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2525:74:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2525:74:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2612:38:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2642:2:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2646:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2638:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2638:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2632:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "2632:18:12" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "2616:12:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2674:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2682:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2670:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2670:15:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2687:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2663:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2663:27:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2663:27:12" - }, - { - "nodeType": "YulAssignment", - "src": "2703:68:12", - "value": { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "2741:12:12" - }, - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2759:6:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2767:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2755:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2755:15:12" - } - ], - "functionName": { - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulIdentifier", - "src": "2713:27:12" - }, - "nodeType": "YulFunctionCall", - "src": "2713:58:12" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2703:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2784:25:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "2798:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2806:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2794:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2794:15:12" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "2784:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2822:19:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2833:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2838:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2829:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2829:12:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2822:3:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2316:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2319:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2313:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "2313:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2327:18:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2329:14:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2338:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2341:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2334:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2334:9:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2329:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2309:3:12", - "statements": [] - }, - "src": "2305:546:12" - }, - { - "nodeType": "YulAssignment", - "src": "2860:14:12", - "value": { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2868:6:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2860:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1905:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1916:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1927:4:12", - "type": "" - } - ], - "src": "1741:1139:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2955:239:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3001:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3010:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3013:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3003:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3003:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3003:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2976:7:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2985:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2972:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2972:23:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2997:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2968:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2968:32:12" - }, - "nodeType": "YulIf", - "src": "2965:52:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3026:36:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3052:9:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3039:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "3039:23:12" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3030:5:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3148:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3157:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3160:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3150:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3150:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3150:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3084:5:12" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3095:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3102:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3091:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3091:54:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3081:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3081:65:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3074:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3074:73:12" - }, - "nodeType": "YulIf", - "src": "3071:93:12" - }, - { - "nodeType": "YulAssignment", - "src": "3173:15:12", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3183:5:12" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3173:6:12" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2921:9:12", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2932:7:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2944:6:12", - "type": "" - } - ], - "src": "2885:309:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3348:109:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3365:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3376:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3358:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3358:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3358:21:12" - }, - { - "nodeType": "YulAssignment", - "src": "3388:63:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3424:6:12" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3436:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3447:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3432:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3432:18:12" - } - ], - "functionName": { - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulIdentifier", - "src": "3396:27:12" - }, - "nodeType": "YulFunctionCall", - "src": "3396:55:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3388:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3317:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3328:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3339:4:12", - "type": "" - } - ], - "src": "3199:258:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3563:125:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3573:26:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3585:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3596:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3581:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3581:18:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3573:4:12" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3615:9:12" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3630:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3638:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3626:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3626:55:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3608:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3608:74:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3608:74:12" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3532:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3543:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3554:4:12", - "type": "" - } - ], - "src": "3462:226:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3725:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3742:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3745:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3735:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3735:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3735:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3839:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3842:4:12", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3832:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3832:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3832:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3863:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3866:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3856:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3856:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3856:15:12" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "3693:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3914:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3931:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3934:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3924:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3924:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3924:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4028:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4031:4:12", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4021:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4021:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4021:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4052:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4055:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4045:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4045:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4045:15:12" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "3882:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4118:302:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4217:168:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4238:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4241:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4231:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4231:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4231:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4339:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4342:4:12", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4332:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4332:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4332:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4367:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4370:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4360:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4360:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4360:15:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4134:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4141:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "4131:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "4131:77:12" - }, - "nodeType": "YulIf", - "src": "4128:257:12" - }, - { - "nodeType": "YulAssignment", - "src": "4394:20:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4405:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4412:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4401:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4401:13:12" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "4394:3:12" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "4100:5:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "4110:3:12", - "type": "" - } - ], - "src": "4071:349:12" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n pos := add(headStart, 64)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n tail := pos\n }\n function abi_encode_array_bytes4_dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), 0xffffffff00000000000000000000000000000000000000000000000000000000))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 64\n pos := add(headStart, _2)\n let tail_2 := add(add(headStart, shl(5, length)), _2)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0))\n let _3 := mload(srcPtr)\n mstore(tail_2, and(mload(_3), 0xffffffffffffffffffffffffffffffffffffffff))\n let memberValue0 := mload(add(_3, _1))\n mstore(add(tail_2, _1), _2)\n tail_2 := abi_encode_array_bytes4_dyn(memberValue0, add(tail_2, _2))\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n tail := tail_2\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_array_bytes4_dyn(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n ret := add(value, 1)\n }\n}", - "id": 12, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A0ED627 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x7A0ED627 EQ PUSH2 0xFA JUMPI DUP1 PUSH4 0xADFCA15E EQ PUSH2 0x10F JUMPI DUP1 PUSH4 0xCDFFACC6 EQ PUSH2 0x12F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x52EF6B2C EQ PUSH2 0xE5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD0 PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x569 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xED PUSH2 0x1CB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDC SWAP2 SWAP1 PUSH2 0x5B2 JUMP JUMPDEST PUSH2 0x102 PUSH2 0x25D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDC SWAP2 SWAP1 PUSH2 0x669 JUMP JUMPDEST PUSH2 0x122 PUSH2 0x11D CALLDATASIZE PUSH1 0x4 PUSH2 0x711 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xDC SWAP2 SWAP1 PUSH2 0x747 JUMP JUMPDEST PUSH2 0x1A6 PUSH2 0x13D CALLDATASIZE PUSH1 0x4 PUSH2 0x569 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xDC JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x252 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x227 JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131E SLOAD PUSH1 0x60 SWAP1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2BD JUMPI PUSH2 0x2BD PUSH2 0x75A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x303 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2DB JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x463 JUMPI PUSH1 0x0 DUP4 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x328 JUMPI PUSH2 0x328 PUSH2 0x789 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x368 JUMPI PUSH2 0x368 PUSH2 0x789 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP1 MSTORE SWAP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x429 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x3D6 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x440 JUMPI PUSH2 0x440 PUSH2 0x789 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x45B SWAP1 PUSH2 0x7B8 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x309 JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x55C JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x509 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x57B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x5AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x600 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5CE JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x65E JUMPI DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x620 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x703 JUMPI DUP9 DUP4 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE DUP8 ADD MLOAD DUP8 DUP5 ADD DUP8 SWAP1 MSTORE PUSH2 0x6F0 DUP8 DUP6 ADD DUP3 PUSH2 0x60C JUMP JUMPDEST SWAP6 DUP9 ADD SWAP6 SWAP4 POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x690 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x723 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x5AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x5AB PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x60C JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x811 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 0xF6 0xC2 EXTCODESIZE 0xC PUSH5 0xEFFD7424EB SWAP14 0xA8 0xE1 EXTCODECOPY 0xC0 0xA6 0x2F 0xAB SWAP10 SWAP1 PUSH5 0x3CE1A7BC54 0xF8 ADDRESS 0xCC PUSH23 0x8464736F6C634300080A00330000000000000000000000 ", - "sourceMap": "539:2484:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2799:222;;;;;;:::i;:::-;2978:36;;2879:4;2978:36;;;:22;:36;;;;;;;;;2799:222;;;;516:14:12;;509:22;491:41;;479:2;464:18;2799:222:3;;;;;;;;2038:220;;;:::i;:::-;;;;;;;:::i;967:523::-;;;:::i;:::-;;;;;;;:::i;1646:291::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2488:273::-;;;;;;:::i;:::-;2693:48;;2568:21;2693:48;;;492:45:11;2693:48:3;;;;;:61;;;;2488:273;;;;3638:42:12;3626:55;;;3608:74;;3596:2;3581:18;2488:273:3;3462:226:12;2038:220:3;2096:32;2140:36;492:45:11;2234:17:3;;;2216:35;;;;;;;;;;;;;;;;;;;2140:66;;-1:-1:-1;2216:35:3;;2234:17;2216:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2130:128;2038:220;:::o;967:523::-;1147:17;:24;1017:22;;492:45:11;;1147:24:3;1191:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1191:22:3;;;;;;;;;;;;;;;;1181:32;;1228:9;1223:261;1243:9;1239:1;:13;1223:261;;;1273:21;1297:2;:17;;1315:1;1297:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1273:44;;1357:13;1331:7;1339:1;1331:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:39;;;;;;1415:40;;;1331:23;1415:40;;;:25;;;:40;;;;;;;1384:89;;;;;;;;;;;;;;;;;;;1415:40;;1384:89;;;1415:40;1384:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;1392:1;1384:10;;;;;;;;:::i;:::-;;;;;;;:28;;:89;;;;1259:225;1254:3;;;;;:::i;:::-;;;;1223:261;;;;1041:449;;967:523;:::o;1646:291::-;1879:33;;;1777:36;1879:33;;;:25;:33;;;;;;;;;1853:77;;;;;;;;;;;;;;;;;1726:39;;492:45:11;;1853:77:3;;1879:33;1853:77;;;1879:33;1853:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1767:170;1646:291;;;:::o;14:332:12:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;199:117;335:5;14:332;-1:-1:-1;;;14:332:12:o;543:681::-;714:2;766:21;;;836:13;;739:18;;;858:22;;;685:4;;714:2;937:15;;;;911:2;896:18;;;685:4;980:218;994:6;991:1;988:13;980:218;;;1059:13;;1074:42;1055:62;1043:75;;1173:15;;;;1138:12;;;;1016:1;1009:9;980:218;;;-1:-1:-1;1215:3:12;;543:681;-1:-1:-1;;;;;;543:681:12:o;1229:507::-;1281:3;1319:5;1313:12;1346:6;1341:3;1334:19;1372:4;1401:2;1396:3;1392:12;1385:19;;1438:2;1431:5;1427:14;1459:1;1469:242;1483:6;1480:1;1477:13;1469:242;;;1548:13;;1563:66;1544:86;1532:99;;1651:12;;;;1686:15;;;;1505:1;1498:9;1469:242;;;-1:-1:-1;1727:3:12;;1229:507;-1:-1:-1;;;;;1229:507:12:o;1741:1139::-;1927:4;1956:2;1996;1985:9;1981:18;2026:2;2015:9;2008:21;2049:6;2084;2078:13;2115:6;2107;2100:22;2141:2;2131:12;;2174:2;2163:9;2159:18;2152:25;;2236:2;2226:6;2223:1;2219:14;2208:9;2204:30;2200:39;2274:2;2266:6;2262:15;2295:1;2305:546;2319:6;2316:1;2313:13;2305:546;;;2384:22;;;2408:66;2380:95;2368:108;;2499:13;;2544:9;;2555:42;2540:58;2525:74;;2638:11;;2632:18;2670:15;;;2663:27;;;2713:58;2755:15;;;2632:18;2713:58;:::i;:::-;2829:12;;;;2703:68;-1:-1:-1;;2794:15:12;;;;2341:1;2334:9;2305:546;;;-1:-1:-1;2868:6:12;;1741:1139;-1:-1:-1;;;;;;;;1741:1139:12:o;2885:309::-;2944:6;2997:2;2985:9;2976:7;2972:23;2968:32;2965:52;;;3013:1;3010;3003:12;2965:52;3052:9;3039:23;3102:42;3095:5;3091:54;3084:5;3081:65;3071:93;;3160:1;3157;3150:12;3199:258;3376:2;3365:9;3358:21;3339:4;3396:55;3447:2;3436:9;3432:18;3424:6;3396:55;:::i;3693:184::-;3745:77;3742:1;3735:88;3842:4;3839:1;3832:15;3866:4;3863:1;3856:15;3882:184;3934:77;3931:1;3924:88;4031:4;4028:1;4021:15;4055:4;4052:1;4045:15;4071:349;4110:3;4141:66;4134:5;4131:77;4128:257;;;4241:77;4238:1;4231:88;4342:4;4339:1;4332:15;4370:4;4367:1;4360:15;4128:257;-1:-1:-1;4412:1:12;4401:13;;4071:349::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "425200", - "executionCost": "461", - "totalCost": "425661" - }, - "external": { - "facetAddress(bytes4)": "2537", - "facetAddresses()": "infinite", - "facetFunctionSelectors(address)": "infinite", - "facets()": "infinite", - "supportsInterface(bytes4)": "2480" - } - }, - "methodIdentifiers": { - "facetAddress(bytes4)": "cdffacc6", - "facetAddresses()": "52ef6b2c", - "facetFunctionSelectors(address)": "adfca15e", - "facets()": "7a0ed627", - "supportsInterface(bytes4)": "01ffc9a7" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_functionSelector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facetAddress_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facetAddresses_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"facetFunctionSelectors_\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondLoupe.Facet[]\",\"name\":\"facets_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"facetAddress(bytes4)\":{\"details\":\"If facet is not found return address(0).\",\"params\":{\"_functionSelector\":\"The function selector.\"},\"returns\":{\"facetAddress_\":\"The facet address.\"}},\"facetAddresses()\":{\"returns\":{\"facetAddresses_\":\"facetAddresses_\"}},\"facetFunctionSelectors(address)\":{\"params\":{\"_facet\":\"The facet address.\"},\"returns\":{\"facetFunctionSelectors_\":\"facetFunctionSelectors_\"}},\"facets()\":{\"returns\":{\"facets_\":\"Facet\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"facetAddress(bytes4)\":{\"notice\":\"Gets the facet that supports the given selector.\"},\"facetAddresses()\":{\"notice\":\"Get all the facet addresses used by a diamond.\"},\"facetFunctionSelectors(address)\":{\"notice\":\"Gets all the function selectors provided by a facet.\"},\"facets()\":{\"notice\":\"Gets all facets and their selectors.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\":\"DiamondLoupeFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\",\"keccak256\":\"0x40116a553fb6b8e25371199648a526d61eefee47ba24f0909b00c7301dec612e\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0x10884024af2c0f7deca0fac4ddf84e76da5dba35b6e02fabeac8ea54c1a5c6f7\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x7541f7408d0f74162bc4664d5e012427f2ceaab2abadca0353269ef15ee03d8b\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "facetAddress(bytes4)": { - "notice": "Gets the facet that supports the given selector." - }, - "facetAddresses()": { - "notice": "Get all the facet addresses used by a diamond." - }, - "facetFunctionSelectors(address)": { - "notice": "Gets all the function selectors provided by a facet." - }, - "facets()": { - "notice": "Gets all facets and their selectors." - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9" -} \ No newline at end of file diff --git a/extendedArtifacts/DiamondLoupeFacetWithoutSupportsInterface.json b/extendedArtifacts/DiamondLoupeFacetWithoutSupportsInterface.json deleted file mode 100644 index 968b7af..0000000 --- a/extendedArtifacts/DiamondLoupeFacetWithoutSupportsInterface.json +++ /dev/null @@ -1,3029 +0,0 @@ -{ - "contractName": "DiamondLoupeFacetWithoutSupportsInterface", - "sourceName": "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b506107c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806352ef6b2c146100515780637a0ed6271461006f578063adfca15e14610084578063cdffacc6146100a4575b600080fd5b610059610140565b60405161006691906104de565b60405180910390f35b6100776101d2565b6040516100669190610595565b61009761009236600461063d565b6103de565b604051610066919061067a565b61011b6100b236600461068d565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610066565b606060007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c600281018054604080516020808402820181019092528281529394508301828280156101c757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161019c575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e546060907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c908067ffffffffffffffff811115610232576102326106cf565b60405190808252806020026020018201604052801561027857816020015b6040805180820190915260008152606060208201528152602001906001900390816102505790505b50925060005b818110156103d857600083600201828154811061029d5761029d6106fe565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050808583815181106102dd576102dd6106fe565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561039e57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161034b5790505b50505050508583815181106103b5576103b56106fe565b6020026020010151602001819052505080806103d09061072d565b91505061027e565b50505090565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d602090815260409182902080548351818402810184019094528084526060937fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c93909291908301828280156104d157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161047e5790505b5050505050915050919050565b6020808252825182820181905260009190848201906040850190845b8181101561052c57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016104fa565b50909695505050505050565b600081518084526020808501945080840160005b8381101561058a5781517fffffffff00000000000000000000000000000000000000000000000000000000168752958201959082019060010161054c565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561062f578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff16845287015187840187905261061c87850182610538565b95880195935050908601906001016105bc565b509098975050505050505050565b60006020828403121561064f57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461067357600080fd5b9392505050565b6020815260006106736020830184610538565b60006020828403121561069f57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461067357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610786577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220cb986091e36c99b33615a659f908bbdf81cdc170b39858195b82d45b2e733a5e64736f6c634300080a0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806352ef6b2c146100515780637a0ed6271461006f578063adfca15e14610084578063cdffacc6146100a4575b600080fd5b610059610140565b60405161006691906104de565b60405180910390f35b6100776101d2565b6040516100669190610595565b61009761009236600461063d565b6103de565b604051610066919061067a565b61011b6100b236600461068d565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610066565b606060007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c600281018054604080516020808402820181019092528281529394508301828280156101c757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161019c575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e546060907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c908067ffffffffffffffff811115610232576102326106cf565b60405190808252806020026020018201604052801561027857816020015b6040805180820190915260008152606060208201528152602001906001900390816102505790505b50925060005b818110156103d857600083600201828154811061029d5761029d6106fe565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050808583815181106102dd576102dd6106fe565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561039e57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161034b5790505b50505050508583815181106103b5576103b56106fe565b6020026020010151602001819052505080806103d09061072d565b91505061027e565b50505090565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d602090815260409182902080548351818402810184019094528084526060937fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c93909291908301828280156104d157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161047e5790505b5050505050915050919050565b6020808252825182820181905260009190848201906040850190845b8181101561052c57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016104fa565b50909695505050505050565b600081518084526020808501945080840160005b8381101561058a5781517fffffffff00000000000000000000000000000000000000000000000000000000168752958201959082019060010161054c565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561062f578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff16845287015187840187905261061c87850182610538565b95880195935050908601906001016105bc565b509098975050505050505050565b60006020828403121561064f57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461067357600080fd5b9392505050565b6020815260006106736020830184610538565b60006020828403121561069f57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461067357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610786577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220cb986091e36c99b33615a659f908bbdf81cdc170b39858195b82d45b2e733a5e64736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "facetAddress(bytes4)": { - "details": "If facet is not found return address(0).", - "params": { - "_functionSelector": "The function selector." - }, - "returns": { - "facetAddress_": "The facet address." - } - }, - "facetAddresses()": { - "returns": { - "facetAddresses_": "facetAddresses_" - } - }, - "facetFunctionSelectors(address)": { - "params": { - "_facet": "The facet address." - }, - "returns": { - "facetFunctionSelectors_": "facetFunctionSelectors_" - } - }, - "facets()": { - "returns": { - "facets_": "Facet" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7C3 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x52EF6B2C EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x7A0ED627 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0xADFCA15E EQ PUSH2 0x84 JUMPI DUP1 PUSH4 0xCDFFACC6 EQ PUSH2 0xA4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x140 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x4DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x77 PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x595 JUMP JUMPDEST PUSH2 0x97 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x63D JUMP JUMPDEST PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x67A JUMP JUMPDEST PUSH2 0x11B PUSH2 0xB2 CALLDATASIZE PUSH1 0x4 PUSH2 0x68D JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x66 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x19C JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131E SLOAD PUSH1 0x60 SWAP1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x232 JUMPI PUSH2 0x232 PUSH2 0x6CF JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x278 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x250 JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D8 JUMPI PUSH1 0x0 DUP4 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x29D JUMPI PUSH2 0x29D PUSH2 0x6FE JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2DD JUMPI PUSH2 0x2DD PUSH2 0x6FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP1 MSTORE SWAP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x39E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x34B JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3B5 JUMPI PUSH2 0x3B5 PUSH2 0x6FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x3D0 SWAP1 PUSH2 0x72D JUMP JUMPDEST SWAP2 POP POP PUSH2 0x27E JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x47E JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x52C JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4FA JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x58A JUMPI DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x54C JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x62F JUMPI DUP9 DUP4 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE DUP8 ADD MLOAD DUP8 DUP5 ADD DUP8 SWAP1 MSTORE PUSH2 0x61C DUP8 DUP6 ADD DUP3 PUSH2 0x538 JUMP JUMPDEST SWAP6 DUP9 ADD SWAP6 SWAP4 POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5BC JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x64F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x673 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x538 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x69F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x786 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB SWAP9 PUSH1 0x91 0xE3 PUSH13 0x99B33615A659F908BBDF81CDC1 PUSH17 0xB39858195B82D45B2E733A5E64736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "481:2239:4:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@facetAddress_519": { - "entryPoint": null, - "id": 519, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@facetAddresses_492": { - "entryPoint": 320, - "id": 492, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@facetFunctionSelectors_469": { - "entryPoint": 990, - "id": 469, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@facets_441": { - "entryPoint": 466, - "id": 441, - "parameterSlots": 0, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 1597, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes4": { - "entryPoint": 1677, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_array_bytes4_dyn": { - "entryPoint": 1336, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1246, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1658, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1429, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "increment_t_uint256": { - "entryPoint": 1837, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x32": { - "entryPoint": 1790, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1743, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4230:12", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:12", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "165:530:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "175:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "185:2:12", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "179:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "196:32:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "214:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "225:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "210:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "210:18:12" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "200:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "244:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "255:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "237:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "237:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "237:21:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "267:17:12", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "278:6:12" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "271:3:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "293:27:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "313:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "307:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "307:13:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "297:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "336:6:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "344:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "329:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "329:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "329:22:12" - }, - { - "nodeType": "YulAssignment", - "src": "360:25:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "371:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "382:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "367:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "367:18:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "360:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "394:29:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "412:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "420:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "408:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "408:15:12" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "398:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "432:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "441:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "436:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "500:169:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "521:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "536:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "530:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "530:13:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "545:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "526:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "526:62:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "514:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "514:75:12" - }, - "nodeType": "YulExpressionStatement", - "src": "514:75:12" - }, - { - "nodeType": "YulAssignment", - "src": "602:19:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "613:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "618:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "609:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "609:12:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "602:3:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "634:25:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "648:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "656:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "644:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "644:15:12" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "634:6:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "462:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "465:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "459:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "459:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "473:18:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "475:14:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "484:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "487:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "480:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "480:9:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "475:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "455:3:12", - "statements": [] - }, - "src": "451:218:12" - }, - { - "nodeType": "YulAssignment", - "src": "678:11:12", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "686:3:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "678:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "134:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "145:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "156:4:12", - "type": "" - } - ], - "src": "14:681:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "760:447:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "770:26:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "790:5:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "784:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "784:12:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "774:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "812:3:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "817:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "805:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "805:19:12" - }, - "nodeType": "YulExpressionStatement", - "src": "805:19:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "833:14:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "843:4:12", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "837:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "856:19:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "867:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "872:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "863:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "863:12:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "856:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "884:28:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "902:5:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "909:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "898:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "898:14:12" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "888:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "921:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "930:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "925:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "989:193:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1010:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1025:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1019:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "1019:13:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1034:66:12", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1015:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1015:86:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1003:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1003:99:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1003:99:12" - }, - { - "nodeType": "YulAssignment", - "src": "1115:19:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1126:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1131:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1122:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1122:12:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1115:3:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1147:25:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1161:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1169:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1157:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1157:15:12" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1147:6:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "951:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "954:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "948:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "948:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "962:18:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "964:14:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "973:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "976:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "969:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "969:9:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "964:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "944:3:12", - "statements": [] - }, - "src": "940:242:12" - }, - { - "nodeType": "YulAssignment", - "src": "1191:10:12", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1198:3:12" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1191:3:12" - } - ] - } - ] - }, - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "737:5:12", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "744:3:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "752:3:12", - "type": "" - } - ], - "src": "700:507:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1407:944:12", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1417:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1427:2:12", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1421:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1438:32:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1456:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1467:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1452:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1452:18:12" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "1442:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1486:9:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1497:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1479:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1479:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1479:21:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1509:17:12", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "1520:6:12" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1513:3:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1535:27:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1555:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1549:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "1549:13:12" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1539:6:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "1578:6:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1586:6:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1571:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1571:22:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1571:22:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1602:12:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1612:2:12", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1606:2:12", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1623:25:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1634:9:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1645:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1630:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1630:18:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1623:3:12" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1657:53:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1679:9:12" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1694:1:12", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1697:6:12" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1690:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1690:14:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1675:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1675:30:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1707:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1671:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1671:39:12" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "1661:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1719:29:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1737:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1745:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1733:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1733:15:12" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "1723:6:12", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1757:10:12", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1766:1:12", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1761:1:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1825:497:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1846:3:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "1859:6:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1867:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1855:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1855:22:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1879:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1851:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1851:95:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1839:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1839:108:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1839:108:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1960:23:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1976:6:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1970:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "1970:13:12" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1964:2:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2003:6:12" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2021:2:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2015:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "2015:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2026:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2011:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2011:58:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1996:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "1996:74:12" - }, - "nodeType": "YulExpressionStatement", - "src": "1996:74:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2083:38:12", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2113:2:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2117:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2109:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2109:11:12" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2103:5:12" - }, - "nodeType": "YulFunctionCall", - "src": "2103:18:12" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "2087:12:12", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2145:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2153:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2141:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2141:15:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2158:2:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2134:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2134:27:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2134:27:12" - }, - { - "nodeType": "YulAssignment", - "src": "2174:68:12", - "value": { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "2212:12:12" - }, - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2230:6:12" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2238:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2226:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2226:15:12" - } - ], - "functionName": { - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulIdentifier", - "src": "2184:27:12" - }, - "nodeType": "YulFunctionCall", - "src": "2184:58:12" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2174:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2255:25:12", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "2269:6:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2277:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2265:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2265:15:12" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "2255:6:12" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2293:19:12", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2304:3:12" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2309:2:12" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2300:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2300:12:12" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2293:3:12" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1787:1:12" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1790:6:12" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1784:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "1784:13:12" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1798:18:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1800:14:12", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1809:1:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1812:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1805:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "1805:9:12" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1800:1:12" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1780:3:12", - "statements": [] - }, - "src": "1776:546:12" - }, - { - "nodeType": "YulAssignment", - "src": "2331:14:12", - "value": { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2339:6:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2331:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1376:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1387:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1398:4:12", - "type": "" - } - ], - "src": "1212:1139:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2426:239:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2472:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2481:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2484:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2474:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2474:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2474:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2447:7:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2456:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2443:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2443:23:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2468:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2439:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2439:32:12" - }, - "nodeType": "YulIf", - "src": "2436:52:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2497:36:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2523:9:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2510:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "2510:23:12" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2501:5:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2619:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2628:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2631:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2621:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2621:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2621:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2555:5:12" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2566:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2573:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2562:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2562:54:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2552:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "2552:65:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2545:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2545:73:12" - }, - "nodeType": "YulIf", - "src": "2542:93:12" - }, - { - "nodeType": "YulAssignment", - "src": "2644:15:12", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2654:5:12" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2644:6:12" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2392:9:12", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2403:7:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2415:6:12", - "type": "" - } - ], - "src": "2356:309:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2819:109:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2836:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2847:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2829:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "2829:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "2829:21:12" - }, - { - "nodeType": "YulAssignment", - "src": "2859:63:12", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2895:6:12" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2907:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2918:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2903:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "2903:18:12" - } - ], - "functionName": { - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulIdentifier", - "src": "2867:27:12" - }, - "nodeType": "YulFunctionCall", - "src": "2867:55:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2859:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2788:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2799:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2810:4:12", - "type": "" - } - ], - "src": "2670:258:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3002:263:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3048:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3057:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3060:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3050:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3050:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3050:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3023:7:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3032:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3019:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3019:23:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3044:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3015:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3015:32:12" - }, - "nodeType": "YulIf", - "src": "3012:52:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3073:36:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3099:9:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3086:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "3086:23:12" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3077:5:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3219:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3228:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3231:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3221:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3221:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3221:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3131:5:12" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3142:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3149:66:12", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3138:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3138:78:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3128:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3128:89:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3121:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3121:97:12" - }, - "nodeType": "YulIf", - "src": "3118:117:12" - }, - { - "nodeType": "YulAssignment", - "src": "3244:15:12", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3254:5:12" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3244:6:12" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes4", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2968:9:12", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2979:7:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2991:6:12", - "type": "" - } - ], - "src": "2933:332:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3371:125:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3381:26:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3393:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3404:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3389:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3389:18:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3381:4:12" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3423:9:12" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3438:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3446:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3434:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "3434:55:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3416:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3416:74:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3416:74:12" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3340:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3351:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3362:4:12", - "type": "" - } - ], - "src": "3270:226:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3533:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3550:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3553:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3543:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3543:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3543:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3647:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3650:4:12", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3640:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3640:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3640:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3671:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3674:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3664:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3664:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3664:15:12" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "3501:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3722:152:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3739:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3742:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3732:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3732:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3732:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3836:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3839:4:12", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3829:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3829:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3829:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3860:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3863:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3853:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "3853:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "3853:15:12" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "3690:184:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3926:302:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4025:168:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4046:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4049:77:12", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4039:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4039:88:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4039:88:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4147:1:12", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4150:4:12", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4140:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4140:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4140:15:12" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4175:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4178:4:12", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4168:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "4168:15:12" - }, - "nodeType": "YulExpressionStatement", - "src": "4168:15:12" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3942:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3949:66:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3939:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "3939:77:12" - }, - "nodeType": "YulIf", - "src": "3936:257:12" - }, - { - "nodeType": "YulAssignment", - "src": "4202:20:12", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4213:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4220:1:12", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4209:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "4209:13:12" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "4202:3:12" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3908:5:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "3918:3:12", - "type": "" - } - ], - "src": "3879:349:12" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n pos := add(headStart, 64)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n tail := pos\n }\n function abi_encode_array_bytes4_dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), 0xffffffff00000000000000000000000000000000000000000000000000000000))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 64\n pos := add(headStart, _2)\n let tail_2 := add(add(headStart, shl(5, length)), _2)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0))\n let _3 := mload(srcPtr)\n mstore(tail_2, and(mload(_3), 0xffffffffffffffffffffffffffffffffffffffff))\n let memberValue0 := mload(add(_3, _1))\n mstore(add(tail_2, _1), _2)\n tail_2 := abi_encode_array_bytes4_dyn(memberValue0, add(tail_2, _2))\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n tail := tail_2\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_array_bytes4_dyn(value0, add(headStart, 32))\n }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n ret := add(value, 1)\n }\n}", - "id": 12, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x52EF6B2C EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0x7A0ED627 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0xADFCA15E EQ PUSH2 0x84 JUMPI DUP1 PUSH4 0xCDFFACC6 EQ PUSH2 0xA4 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x140 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x4DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x77 PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x595 JUMP JUMPDEST PUSH2 0x97 PUSH2 0x92 CALLDATASIZE PUSH1 0x4 PUSH2 0x63D JUMP JUMPDEST PUSH2 0x3DE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66 SWAP2 SWAP1 PUSH2 0x67A JUMP JUMPDEST PUSH2 0x11B PUSH2 0xB2 CALLDATASIZE PUSH1 0x4 PUSH2 0x68D JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x66 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1C7 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x19C JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131E SLOAD PUSH1 0x60 SWAP1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x232 JUMPI PUSH2 0x232 PUSH2 0x6CF JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x278 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x250 JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3D8 JUMPI PUSH1 0x0 DUP4 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x29D JUMPI PUSH2 0x29D PUSH2 0x6FE JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2DD JUMPI PUSH2 0x2DD PUSH2 0x6FE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP1 MSTORE SWAP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x39E JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x34B JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3B5 JUMPI PUSH2 0x3B5 PUSH2 0x6FE JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x3D0 SWAP1 PUSH2 0x72D JUMP JUMPDEST SWAP2 POP POP PUSH2 0x27E JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x47E JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x52C JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x4FA JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x58A JUMPI DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x54C JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x62F JUMPI DUP9 DUP4 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE DUP8 ADD MLOAD DUP8 DUP5 ADD DUP8 SWAP1 MSTORE PUSH2 0x61C DUP8 DUP6 ADD DUP3 PUSH2 0x538 JUMP JUMPDEST SWAP6 DUP9 ADD SWAP6 SWAP4 POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5BC JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x64F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x673 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x538 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x69F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x673 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x786 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB SWAP9 PUSH1 0x91 0xE3 PUSH13 0x99B33615A659F908BBDF81CDC1 PUSH17 0xB39858195B82D45B2E733A5E64736F6C63 NUMBER STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "481:2239:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1995:220;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;924:523;;;:::i;:::-;;;;;;;:::i;1603:291::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2445:273::-;;;;;;:::i;:::-;2650:48;;2525:21;2650:48;;;492:45:11;2650:48:4;;;;;:61;;;;2445:273;;;;3446:42:12;3434:55;;;3416:74;;3404:2;3389:18;2445:273:4;3270:226:12;1995:220:4;2053:32;2097:36;492:45:11;2191:17:4;;;2173:35;;;;;;;;;;;;;;;;;;;2097:66;;-1:-1:-1;2173:35:4;;2191:17;2173:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2087:128;1995:220;:::o;924:523::-;1104:17;:24;974:22;;492:45:11;;1104:24:4;1148:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1148:22:4;;;;;;;;;;;;;;;;1138:32;;1185:9;1180:261;1200:9;1196:1;:13;1180:261;;;1230:21;1254:2;:17;;1272:1;1254:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1230:44;;1314:13;1288:7;1296:1;1288:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:39;;;;;;1372:40;;;1288:23;1372:40;;;:25;;;:40;;;;;;;1341:89;;;;;;;;;;;;;;;;;;;1372:40;;1341:89;;;1372:40;1341:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;1349:1;1341:10;;;;;;;;:::i;:::-;;;;;;;:28;;:89;;;;1216:225;1211:3;;;;;:::i;:::-;;;;1180:261;;;;998:449;;924:523;:::o;1603:291::-;1836:33;;;1734:36;1836:33;;;:25;:33;;;;;;;;;1810:77;;;;;;;;;;;;;;;;;1683:39;;492:45:11;;1810:77:4;;1836:33;1810:77;;;1836:33;1810:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1724:170;1603:291;;;:::o;14:681:12:-;185:2;237:21;;;307:13;;210:18;;;329:22;;;156:4;;185:2;408:15;;;;382:2;367:18;;;156:4;451:218;465:6;462:1;459:13;451:218;;;530:13;;545:42;526:62;514:75;;644:15;;;;609:12;;;;487:1;480:9;451:218;;;-1:-1:-1;686:3:12;;14:681;-1:-1:-1;;;;;;14:681:12:o;700:507::-;752:3;790:5;784:12;817:6;812:3;805:19;843:4;872:2;867:3;863:12;856:19;;909:2;902:5;898:14;930:1;940:242;954:6;951:1;948:13;940:242;;;1019:13;;1034:66;1015:86;1003:99;;1122:12;;;;1157:15;;;;976:1;969:9;940:242;;;-1:-1:-1;1198:3:12;;700:507;-1:-1:-1;;;;;700:507:12:o;1212:1139::-;1398:4;1427:2;1467;1456:9;1452:18;1497:2;1486:9;1479:21;1520:6;1555;1549:13;1586:6;1578;1571:22;1612:2;1602:12;;1645:2;1634:9;1630:18;1623:25;;1707:2;1697:6;1694:1;1690:14;1679:9;1675:30;1671:39;1745:2;1737:6;1733:15;1766:1;1776:546;1790:6;1787:1;1784:13;1776:546;;;1855:22;;;1879:66;1851:95;1839:108;;1970:13;;2015:9;;2026:42;2011:58;1996:74;;2109:11;;2103:18;2141:15;;;2134:27;;;2184:58;2226:15;;;2103:18;2184:58;:::i;:::-;2300:12;;;;2174:68;-1:-1:-1;;2265:15:12;;;;1812:1;1805:9;1776:546;;;-1:-1:-1;2339:6:12;;1212:1139;-1:-1:-1;;;;;;;;1212:1139:12:o;2356:309::-;2415:6;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;2523:9;2510:23;2573:42;2566:5;2562:54;2555:5;2552:65;2542:93;;2631:1;2628;2621:12;2542:93;2654:5;2356:309;-1:-1:-1;;;2356:309:12:o;2670:258::-;2847:2;2836:9;2829:21;2810:4;2867:55;2918:2;2907:9;2903:18;2895:6;2867:55;:::i;2933:332::-;2991:6;3044:2;3032:9;3023:7;3019:23;3015:32;3012:52;;;3060:1;3057;3050:12;3012:52;3099:9;3086:23;3149:66;3142:5;3138:78;3131:5;3128:89;3118:117;;3231:1;3228;3221:12;3501:184;3553:77;3550:1;3543:88;3650:4;3647:1;3640:15;3674:4;3671:1;3664:15;3690:184;3742:77;3739:1;3732:88;3839:4;3836:1;3829:15;3863:4;3860:1;3853:15;3879:349;3918:3;3949:66;3942:5;3939:77;3936:257;;;4049:77;4046:1;4039:88;4150:4;4147:1;4140:15;4178:4;4175:1;4168:15;3936:257;-1:-1:-1;4220:1:12;4209:13;;3879:349::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "397400", - "executionCost": "436", - "totalCost": "397836" - }, - "external": { - "facetAddress(bytes4)": "2537", - "facetAddresses()": "infinite", - "facetFunctionSelectors(address)": "infinite", - "facets()": "infinite" - } - }, - "methodIdentifiers": { - "facetAddress(bytes4)": "cdffacc6", - "facetAddresses()": "52ef6b2c", - "facetFunctionSelectors(address)": "adfca15e", - "facets()": "7a0ed627" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_functionSelector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facetAddress_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facetAddresses_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"facetFunctionSelectors_\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondLoupe.Facet[]\",\"name\":\"facets_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"facetAddress(bytes4)\":{\"details\":\"If facet is not found return address(0).\",\"params\":{\"_functionSelector\":\"The function selector.\"},\"returns\":{\"facetAddress_\":\"The facet address.\"}},\"facetAddresses()\":{\"returns\":{\"facetAddresses_\":\"facetAddresses_\"}},\"facetFunctionSelectors(address)\":{\"params\":{\"_facet\":\"The facet address.\"},\"returns\":{\"facetFunctionSelectors_\":\"facetFunctionSelectors_\"}},\"facets()\":{\"returns\":{\"facets_\":\"Facet\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"facetAddress(bytes4)\":{\"notice\":\"Gets the facet that supports the given selector.\"},\"facetAddresses()\":{\"notice\":\"Get all the facet addresses used by a diamond.\"},\"facetFunctionSelectors(address)\":{\"notice\":\"Gets all the function selectors provided by a facet.\"},\"facets()\":{\"notice\":\"Gets all facets and their selectors.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\":\"DiamondLoupeFacetWithoutSupportsInterface\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\",\"keccak256\":\"0x5332a757bc4ad695e81685f1e838a7c7b2127e7aae8c510546126393be4036aa\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0x10884024af2c0f7deca0fac4ddf84e76da5dba35b6e02fabeac8ea54c1a5c6f7\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "facetAddress(bytes4)": { - "notice": "Gets the facet that supports the given selector." - }, - "facetAddresses()": { - "notice": "Get all the facet addresses used by a diamond." - }, - "facetFunctionSelectors(address)": { - "notice": "Gets all the function selectors provided by a facet." - }, - "facets()": { - "notice": "Gets all facets and their selectors." - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9" -} \ No newline at end of file diff --git a/extendedArtifacts/EIP173Proxy.json b/extendedArtifacts/EIP173Proxy.json deleted file mode 100644 index 05a6738..0000000 --- a/extendedArtifacts/EIP173Proxy.json +++ /dev/null @@ -1,4601 +0,0 @@ -{ - "contractName": "EIP173Proxy", - "sourceName": "solc_0.8/proxy/EIP173Proxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "implementationAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "ownerAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ProxyImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "id", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405260405162000ccc38038062000ccc8339810160408190526200002691620001fc565b620000318262000046565b6200003d8382620000b8565b505050620002fa565b60006200006060008051602062000cac8339815191525490565b90508160008051602062000cac83398151915255816001600160a01b0316816001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8054908390556040516001600160a01b0380851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a381511562000195576000836001600160a01b0316836040516200013c9190620002dc565b600060405180830381855af49150503d806000811462000179576040519150601f19603f3d011682016040523d82523d6000602084013e6200017e565b606091505b505090508062000193573d806000803e806000fd5b505b505050565b80516001600160a01b0381168114620001b257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001ea578181015183820152602001620001d0565b83811115620001935750506000910152565b6000806000606084860312156200021257600080fd5b6200021d846200019a565b92506200022d602085016200019a565b60408501519092506001600160401b03808211156200024b57600080fd5b818601915086601f8301126200026057600080fd5b815181811115620002755762000275620001b7565b604051601f8201601f19908116603f01168101908382118183101715620002a057620002a0620001b7565b81604052828152896020848701011115620002ba57600080fd5b620002cd836020830160208801620001cd565b80955050505050509250925092565b60008251620002f0818460208701620001cd565b9190910192915050565b6109a2806200030a6000396000f3fe60806040526004361061005e5760003560e01c80634f1ef286116100435780634f1ef286146101295780638da5cb5b1461013c578063f2fde38b14610176576100ca565b806301ffc9a7146100d45780633659cfe614610109576100ca565b366100ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f45544845525f52454a454354454400000000000000000000000000000000000060448201526064015b60405180910390fd5b6100d2610196565b005b3480156100e057600080fd5b506100f46100ef366004610806565b6101e1565b60405190151581526020015b60405180910390f35b34801561011557600080fd5b506100d2610124366004610871565b6103af565b6100d261013736600461088c565b610481565b34801561014857600080fd5b5061015161057c565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610100565b34801561018257600080fd5b506100d2610191366004610871565b6105ab565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460003681823780813683855af491503d8082833e8280156101d7578183f35b8183fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061027457507f7f5828d0000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b1561028157506001919050565b7fffffffff0000000000000000000000000000000000000000000000000000000080831614156102b357506000919050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008416600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa92505050801561039b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526103989181019061090f565b60015b6103a85750600092915050565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b61047e816040518060200160405280600081525061066a565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b6105778383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061066a92505050565b505050565b60006105a67fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905090565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b61047e81610759565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80549083905560405173ffffffffffffffffffffffffffffffffffffffff80851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a38151156105775760008373ffffffffffffffffffffffffffffffffffffffff16836040516107059190610931565b600060405180830381855af49150503d8060008114610740576040519150601f19603f3d011682016040523d82523d6000602084013e610745565b606091505b50509050806101db573d806000803e806000fd5b60006107837fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b9050817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006020828403121561081857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146103a857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461086c57600080fd5b919050565b60006020828403121561088357600080fd5b6103a882610848565b6000806000604084860312156108a157600080fd5b6108aa84610848565b9250602084013567ffffffffffffffff808211156108c757600080fd5b818601915086601f8301126108db57600080fd5b8135818111156108ea57600080fd5b8760208285010111156108fc57600080fd5b6020830194508093505050509250925092565b60006020828403121561092157600080fd5b815180151581146103a857600080fd5b6000825160005b818110156109525760208186018101518583015201610938565b81811115610961576000828501525b50919091019291505056fea2646970667358221220e649c37c69d6249070369be01f33af3368fcdcea9814421a048306c2829c125964736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", - "deployedBytecode": "0x60806040526004361061005e5760003560e01c80634f1ef286116100435780634f1ef286146101295780638da5cb5b1461013c578063f2fde38b14610176576100ca565b806301ffc9a7146100d45780633659cfe614610109576100ca565b366100ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f45544845525f52454a454354454400000000000000000000000000000000000060448201526064015b60405180910390fd5b6100d2610196565b005b3480156100e057600080fd5b506100f46100ef366004610806565b6101e1565b60405190151581526020015b60405180910390f35b34801561011557600080fd5b506100d2610124366004610871565b6103af565b6100d261013736600461088c565b610481565b34801561014857600080fd5b5061015161057c565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610100565b34801561018257600080fd5b506100d2610191366004610871565b6105ab565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460003681823780813683855af491503d8082833e8280156101d7578183f35b8183fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061027457507f7f5828d0000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b1561028157506001919050565b7fffffffff0000000000000000000000000000000000000000000000000000000080831614156102b357506000919050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008416600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa92505050801561039b575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526103989181019061090f565b60015b6103a85750600092915050565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b61047e816040518060200160405280600081525061066a565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b6105778383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061066a92505050565b505050565b60006105a67fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905090565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610661576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b61047e81610759565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80549083905560405173ffffffffffffffffffffffffffffffffffffffff80851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a38151156105775760008373ffffffffffffffffffffffffffffffffffffffff16836040516107059190610931565b600060405180830381855af49150503d8060008114610740576040519150601f19603f3d011682016040523d82523d6000602084013e610745565b606091505b50509050806101db573d806000803e806000fd5b60006107837fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b9050817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006020828403121561081857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146103a857600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461086c57600080fd5b919050565b60006020828403121561088357600080fd5b6103a882610848565b6000806000604084860312156108a157600080fd5b6108aa84610848565b9250602084013567ffffffffffffffff808211156108c757600080fd5b818601915086601f8301126108db57600080fd5b8135818111156108ea57600080fd5b8760208285010111156108fc57600080fd5b6020830194508093505050509250925092565b60006020828403121561092157600080fd5b815180151581146103a857600080fd5b6000825160005b818110156109525760208186018101518583015201610938565b81811115610961576000828501525b50919091019291505056fea2646970667358221220e649c37c69d6249070369be01f33af3368fcdcea9814421a048306c2829c125964736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_38": { - "entryPoint": null, - "id": 38, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_owner_154": { - "entryPoint": null, - "id": 154, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_263": { - "entryPoint": 184, - "id": 263, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setOwner_171": { - "entryPoint": 70, - "id": 171, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 410, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 508, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 732, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 461, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 439, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1925:3", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:3", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:117:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "84:22:3", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "99:6:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "93:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "93:13:3" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "84:5:3" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "169:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "178:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "181:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "171:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "171:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "171:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "128:5:3" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "139:5:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "154:3:3", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:3", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "150:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "150:11:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "163:1:3", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "146:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "146:19:3" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "135:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "135:31:3" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "125:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "125:42:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "118:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "118:50:3" - }, - "nodeType": "YulIf", - "src": "115:70:3" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:3", - "type": "" - } - ], - "src": "14:177:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "228:95:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "245:1:3", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:3:3", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "257:10:3", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "248:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "248:20:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "238:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "238:31:3" - }, - "nodeType": "YulExpressionStatement", - "src": "238:31:3" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "285:1:3", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "288:4:3", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "278:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "278:15:3" - }, - "nodeType": "YulExpressionStatement", - "src": "278:15:3" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:4:3", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "302:15:3" - }, - "nodeType": "YulExpressionStatement", - "src": "302:15:3" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "196:127:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "381:205:3", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "391:10:3", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "400:1:3", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "395:1:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "460:63:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "485:3:3" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "490:1:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "481:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "481:11:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "504:3:3" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "509:1:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "500:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "500:11:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "494:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "494:18:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "474:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "474:39:3" - }, - "nodeType": "YulExpressionStatement", - "src": "474:39:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "421:1:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "424:6:3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "418:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "418:13:3" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "432:19:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "434:15:3", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "443:1:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "446:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "439:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "439:10:3" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "434:1:3" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "414:3:3", - "statements": [] - }, - "src": "410:113:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "549:31:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "562:3:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "567:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "558:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "558:16:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "576:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "551:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "551:27:3" - }, - "nodeType": "YulExpressionStatement", - "src": "551:27:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "538:1:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "541:6:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "535:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "535:13:3" - }, - "nodeType": "YulIf", - "src": "532:48:3" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "359:3:3", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "364:3:3", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "369:6:3", - "type": "" - } - ], - "src": "328:258:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "715:929:3", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "761:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "770:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "773:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "763:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "763:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "763:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "736:7:3" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "745:9:3" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "732:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "732:23:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "757:2:3", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "728:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "728:32:3" - }, - "nodeType": "YulIf", - "src": "725:52:3" - }, - { - "nodeType": "YulAssignment", - "src": "786:50:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "826:9:3" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "796:29:3" - }, - "nodeType": "YulFunctionCall", - "src": "796:40:3" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "786:6:3" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "845:59:3", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "889:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "900:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "885:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "885:18:3" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "855:29:3" - }, - "nodeType": "YulFunctionCall", - "src": "855:49:3" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "845:6:3" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "913:39:3", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "937:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "948:2:3", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "933:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "933:18:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "927:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "927:25:3" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "917:6:3", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "961:28:3", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "979:2:3", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "983:1:3", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "975:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "975:10:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "987:1:3", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "971:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "971:18:3" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "965:2:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1016:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1025:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1028:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1018:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1018:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1018:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1004:6:3" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1012:2:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1001:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1001:14:3" - }, - "nodeType": "YulIf", - "src": "998:34:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1041:32:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1055:9:3" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1066:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1051:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1051:22:3" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1045:2:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1121:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1130:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1133:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1123:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1123:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1123:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1100:2:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1104:4:3", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1096:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1096:13:3" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1111:7:3" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1092:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1092:27:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1085:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1085:35:3" - }, - "nodeType": "YulIf", - "src": "1082:55:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1146:19:3", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1162:2:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1156:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "1156:9:3" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1150:2:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1188:22:3", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1190:16:3" - }, - "nodeType": "YulFunctionCall", - "src": "1190:18:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1190:18:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1180:2:3" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1184:2:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1177:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1177:10:3" - }, - "nodeType": "YulIf", - "src": "1174:36:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1219:17:3", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1233:2:3", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1229:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1229:7:3" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1223:2:3", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1245:23:3", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1265:2:3", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1259:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "1259:9:3" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1249:6:3", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1277:71:3", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1299:6:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1323:2:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1327:4:3", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1319:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1319:13:3" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1334:2:3" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1315:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1315:22:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1339:2:3", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1311:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1311:31:3" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1344:2:3" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1307:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1307:40:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1295:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1295:53:3" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1281:10:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1407:22:3", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1409:16:3" - }, - "nodeType": "YulFunctionCall", - "src": "1409:18:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1409:18:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1366:10:3" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1378:2:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1363:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1363:18:3" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1386:10:3" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1398:6:3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1383:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1383:22:3" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1360:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1360:46:3" - }, - "nodeType": "YulIf", - "src": "1357:72:3" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1445:2:3", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1449:10:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1438:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1438:22:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1438:22:3" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1476:6:3" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1484:2:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1469:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1469:18:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1469:18:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1533:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1542:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1545:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1535:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1535:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1535:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1510:2:3" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1514:2:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1506:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1506:11:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1519:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1502:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1502:20:3" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1524:7:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1499:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1499:33:3" - }, - "nodeType": "YulIf", - "src": "1496:53:3" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1584:2:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1588:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1580:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1580:11:3" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1597:6:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1605:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1593:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1593:15:3" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1610:2:3" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1558:21:3" - }, - "nodeType": "YulFunctionCall", - "src": "1558:55:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1558:55:3" - }, - { - "nodeType": "YulAssignment", - "src": "1622:16:3", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1632:6:3" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1622:6:3" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "665:9:3", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "676:7:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "688:6:3", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "696:6:3", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "704:6:3", - "type": "" - } - ], - "src": "591:1053:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1786:137:3", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1796:27:3", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1816:6:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1810:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "1810:13:3" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1800:6:3", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1858:6:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1866:4:3", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1854:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1854:17:3" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1873:3:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1878:6:3" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1832:21:3" - }, - "nodeType": "YulFunctionCall", - "src": "1832:53:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1832:53:3" - }, - { - "nodeType": "YulAssignment", - "src": "1894:23:3", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1905:3:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1910:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1901:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1901:16:3" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1894:3:3" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1762:3:3", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1767:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1778:3:3", - "type": "" - } - ], - "src": "1649:274:3" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n let offset := mload(add(headStart, 64))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value2 := memPtr\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n}", - "id": 3, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xCCC CODESIZE SUB DUP1 PUSH3 0xCCC DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x1FC JUMP JUMPDEST PUSH3 0x31 DUP3 PUSH3 0x46 JUMP JUMPDEST PUSH3 0x3D DUP4 DUP3 PUSH3 0xB8 JUMP JUMPDEST POP POP POP PUSH3 0x2FA JUMP JUMPDEST PUSH1 0x0 PUSH3 0x60 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xCAC DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xCAC DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH3 0x195 JUMPI PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD PUSH3 0x13C SWAP2 SWAP1 PUSH3 0x2DC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x179 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x17E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH3 0x193 JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x1EA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x1D0 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x193 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x212 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x21D DUP5 PUSH3 0x19A JUMP JUMPDEST SWAP3 POP PUSH3 0x22D PUSH1 0x20 DUP6 ADD PUSH3 0x19A JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x24B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x260 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x275 JUMPI PUSH3 0x275 PUSH3 0x1B7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x2A0 JUMPI PUSH3 0x2A0 PUSH3 0x1B7 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2CD DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x1CD JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x2F0 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x1CD JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x9A2 DUP1 PUSH3 0x30A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4F1EF286 GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x176 JUMPI PUSH2 0xCA JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x109 JUMPI PUSH2 0xCA JUMP JUMPDEST CALLDATASIZE PUSH2 0xCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45544845525F52454A4543544544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xD2 PUSH2 0x196 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF4 PUSH2 0xEF CALLDATASIZE PUSH1 0x4 PUSH2 0x806 JUMP JUMPDEST PUSH2 0x1E1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x115 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x124 CALLDATASIZE PUSH1 0x4 PUSH2 0x871 JUMP JUMPDEST PUSH2 0x3AF JUMP JUMPDEST PUSH2 0xD2 PUSH2 0x137 CALLDATASIZE PUSH1 0x4 PUSH2 0x88C JUMP JUMPDEST PUSH2 0x481 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x148 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x151 PUSH2 0x57C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x100 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x191 CALLDATASIZE PUSH1 0x4 PUSH2 0x871 JUMP JUMPDEST PUSH2 0x5AB JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x0 CALLDATASIZE DUP2 DUP3 CALLDATACOPY DUP1 DUP2 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP4 RETURNDATACOPY DUP3 DUP1 ISZERO PUSH2 0x1D7 JUMPI DUP2 DUP4 RETURN JUMPDEST DUP2 DUP4 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ DUP1 PUSH2 0x274 JUMPI POP PUSH32 0x7F5828D000000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST ISZERO PUSH2 0x281 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND EQ ISZERO PUSH2 0x2B3 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x40 MLOAD PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x1FFC9A7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x39B JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x398 SWAP2 DUP2 ADD SWAP1 PUSH2 0x90F JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x3A8 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x465 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x47E DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x66A JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x537 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x577 DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x66A SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5A6 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x661 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x47E DUP2 PUSH2 0x759 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH2 0x577 JUMPI PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x705 SWAP2 SWAP1 PUSH2 0x931 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x740 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x745 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x1DB JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x783 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x3A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x86C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x883 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3A8 DUP3 PUSH2 0x848 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8AA DUP5 PUSH2 0x848 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x8C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x8EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x8FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x921 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x952 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x938 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x961 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 0x49 0xC3 PUSH29 0x69D6249070369BE01F33AF3368FCDCEA9814421A048306C2829C125964 PUSH20 0x6F6C634300080A0033B53127684A568B3173AE13 0xB9 0xF8 0xA6 ADD PUSH15 0x243E63B6E8EE1178D6A717850B5D61 SUB ", - "sourceMap": "236:3020:0:-:0;;;591:219;;;;;;;;;;;;;;;;;;:::i;:::-;723:23;733:12;723:9;:23::i;:::-;756:47;775:21;798:4;756:18;:47::i;:::-;591:219;;;236:3020;;2908:346;2964:21;2988:8;-1:-1:-1;;;;;;;;;;;2813:73:0;;2636:266;2988:8;2964:32;;3169:8;-1:-1:-1;;;;;;;;;;;3094:84:0;3238:8;-1:-1:-1;;;;;3202:45:0;3223:13;-1:-1:-1;;;;;3202:45:0;;;;;;;;;;;2954:300;2908:346;:::o;1377:1068:2:-;1630:66;1624:73;;1805:93;;;;1923:69;;-1:-1:-1;;;;;1923:69:2;;;;;;;;;;1470:30;;1923:69;2007:11;;:15;2003:436;;2039:12;2057:17;-1:-1:-1;;;;;2057:30:2;2088:4;2057:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:55;;;2112:7;2107:322;;2278:16;2336:14;2333:1;;2315:36;2382:14;2333:1;2372:25;2107:322;2024:415;2003:436;1460:985;1377:1068;;:::o;14:177:3:-;93:13;;-1:-1:-1;;;;;135:31:3;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:258;400:1;410:113;424:6;421:1;418:13;410:113;;;500:11;;;494:18;481:11;;;474:39;446:2;439:10;410:113;;;541:6;538:1;535:13;532:48;;;-1:-1:-1;;576:1:3;558:16;;551:27;328:258::o;591:1053::-;688:6;696;704;757:2;745:9;736:7;732:23;728:32;725:52;;;773:1;770;763:12;725:52;796:40;826:9;796:40;:::i;:::-;786:50;;855:49;900:2;889:9;885:18;855:49;:::i;:::-;948:2;933:18;;927:25;845:59;;-1:-1:-1;;;;;;1001:14:3;;;998:34;;;1028:1;1025;1018:12;998:34;1066:6;1055:9;1051:22;1041:32;;1111:7;1104:4;1100:2;1096:13;1092:27;1082:55;;1133:1;1130;1123:12;1082:55;1162:2;1156:9;1184:2;1180;1177:10;1174:36;;;1190:18;;:::i;:::-;1265:2;1259:9;1233:2;1319:13;;-1:-1:-1;;1315:22:3;;;1339:2;1311:31;1307:40;1295:53;;;1363:18;;;1383:22;;;1360:46;1357:72;;;1409:18;;:::i;:::-;1449:10;1445:2;1438:22;1484:2;1476:6;1469:18;1524:7;1519:2;1514;1510;1506:11;1502:20;1499:33;1496:53;;;1545:1;1542;1535:12;1496:53;1558:55;1610:2;1605;1597:6;1593:15;1588:2;1584;1580:11;1558:55;:::i;:::-;1632:6;1622:16;;;;;;;591:1053;;;;;:::o;1649:274::-;1778:3;1816:6;1810:13;1832:53;1878:6;1873:3;1866:4;1858:6;1854:17;1832:53;:::i;:::-;1901:16;;;;;1649:274;-1:-1:-1;;1649:274:3:o;:::-;236:3020:0;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_215": { - "entryPoint": null, - "id": 215, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_222": { - "entryPoint": null, - "id": 222, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_fallback_227": { - "entryPoint": 406, - "id": 227, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_owner_154": { - "entryPoint": null, - "id": 154, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_263": { - "entryPoint": 1642, - "id": 263, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setOwner_171": { - "entryPoint": 1881, - "id": 171, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@owner_47": { - "entryPoint": 1404, - "id": 47, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@supportsInterface_94": { - "entryPoint": 481, - "id": 94, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@transferOwnership_106": { - "entryPoint": 1451, - "id": 106, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@upgradeToAndCall_134": { - "entryPoint": 1153, - "id": 134, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@upgradeTo_119": { - "entryPoint": 943, - "id": 119, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 2120, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 2161, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_calldata_ptr": { - "entryPoint": 2188, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 2319, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes4": { - "entryPoint": 2054, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 2353, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_ef8a4c3fcfbfa959f184421d0ef9a577b18116cafbc5879aff4e2f1881c7c1f0__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3485:3", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:3", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "188:164:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "205:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "216:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "198:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "198:21:3" - }, - "nodeType": "YulExpressionStatement", - "src": "198:21:3" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "239:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "250:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "235:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "235:18:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "255:2:3", - "type": "", - "value": "14" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "228:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "228:30:3" - }, - "nodeType": "YulExpressionStatement", - "src": "228:30:3" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "278:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "289:2:3", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "274:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "274:18:3" - }, - { - "hexValue": "45544845525f52454a4543544544", - "kind": "string", - "nodeType": "YulLiteral", - "src": "294:16:3", - "type": "", - "value": "ETHER_REJECTED" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "267:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "267:44:3" - }, - "nodeType": "YulExpressionStatement", - "src": "267:44:3" - }, - { - "nodeType": "YulAssignment", - "src": "320:26:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "332:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:2:3", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "328:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "328:18:3" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "320:4:3" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_ef8a4c3fcfbfa959f184421d0ef9a577b18116cafbc5879aff4e2f1881c7c1f0__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "165:9:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "179:4:3", - "type": "" - } - ], - "src": "14:338:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "426:263:3", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "472:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "481:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "484:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "474:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "474:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "474:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "447:7:3" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "456:9:3" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "443:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "443:23:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "468:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "439:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "439:32:3" - }, - "nodeType": "YulIf", - "src": "436:52:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "497:36:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "523:9:3" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "510:12:3" - }, - "nodeType": "YulFunctionCall", - "src": "510:23:3" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "501:5:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "643:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "652:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "655:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "645:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "645:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "645:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "555:5:3" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "566:5:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "573:66:3", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "562:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "562:78:3" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "552:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "552:89:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "545:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "545:97:3" - }, - "nodeType": "YulIf", - "src": "542:117:3" - }, - { - "nodeType": "YulAssignment", - "src": "668:15:3", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "678:5:3" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "668:6:3" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes4", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "392:9:3", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "403:7:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "415:6:3", - "type": "" - } - ], - "src": "357:332:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "789:92:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "799:26:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "811:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "822:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "807:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "807:18:3" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "799:4:3" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "841:9:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "866:6:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "859:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "859:14:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "852:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "852:22:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "834:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "834:41:3" - }, - "nodeType": "YulExpressionStatement", - "src": "834:41:3" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "758:9:3", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "769:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "780:4:3", - "type": "" - } - ], - "src": "694:187:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "935:147:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "945:29:3", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "967:6:3" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "954:12:3" - }, - "nodeType": "YulFunctionCall", - "src": "954:20:3" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "945:5:3" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1060:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1069:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1072:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1062:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1062:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1062:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "996:5:3" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1007:5:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1014:42:3", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1003:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1003:54:3" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "993:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "993:65:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "986:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "986:73:3" - }, - "nodeType": "YulIf", - "src": "983:93:3" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "914:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "925:5:3", - "type": "" - } - ], - "src": "886:196:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1157:116:3", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1203:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1212:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1215:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1205:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1205:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1205:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1178:7:3" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1187:9:3" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1174:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1174:23:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1199:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1170:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1170:32:3" - }, - "nodeType": "YulIf", - "src": "1167:52:3" - }, - { - "nodeType": "YulAssignment", - "src": "1228:39:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1257:9:3" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1238:18:3" - }, - "nodeType": "YulFunctionCall", - "src": "1238:29:3" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1228:6:3" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1123:9:3", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1134:7:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1146:6:3", - "type": "" - } - ], - "src": "1087:186:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1384:559:3", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1430:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1439:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1442:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1432:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1432:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1432:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1405:7:3" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1414:9:3" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1401:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1401:23:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1426:2:3", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1397:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1397:32:3" - }, - "nodeType": "YulIf", - "src": "1394:52:3" - }, - { - "nodeType": "YulAssignment", - "src": "1455:39:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1484:9:3" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1465:18:3" - }, - "nodeType": "YulFunctionCall", - "src": "1465:29:3" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1455:6:3" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1503:46:3", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1534:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1545:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1530:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1530:18:3" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1517:12:3" - }, - "nodeType": "YulFunctionCall", - "src": "1517:32:3" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1507:6:3", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1558:28:3", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1568:18:3", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1562:2:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1613:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1622:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1625:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1615:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1615:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1615:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1601:6:3" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1609:2:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1598:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1598:14:3" - }, - "nodeType": "YulIf", - "src": "1595:34:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1638:32:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1652:9:3" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1663:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1648:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1648:22:3" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1642:2:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1718:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1727:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1730:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1720:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1720:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1720:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1697:2:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1701:4:3", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1693:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1693:13:3" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1708:7:3" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1689:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1689:27:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1682:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1682:35:3" - }, - "nodeType": "YulIf", - "src": "1679:55:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1743:30:3", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1770:2:3" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1757:12:3" - }, - "nodeType": "YulFunctionCall", - "src": "1757:16:3" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1747:6:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1800:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1809:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1812:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1802:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1802:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1802:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1788:6:3" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1796:2:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1785:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1785:14:3" - }, - "nodeType": "YulIf", - "src": "1782:34:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1866:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1875:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1878:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1868:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1868:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1868:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1839:2:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1843:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1835:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1835:15:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1852:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1831:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1831:24:3" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1857:7:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1828:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1828:37:3" - }, - "nodeType": "YulIf", - "src": "1825:57:3" - }, - { - "nodeType": "YulAssignment", - "src": "1891:21:3", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1905:2:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1909:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1901:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1901:11:3" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1891:6:3" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1921:16:3", - "value": { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1931:6:3" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1921:6:3" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1334:9:3", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1345:7:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1357:6:3", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1365:6:3", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "1373:6:3", - "type": "" - } - ], - "src": "1278:665:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2049:125:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2059:26:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2071:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2082:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2067:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2067:18:3" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2059:4:3" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2101:9:3" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2116:6:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2124:42:3", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2112:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2112:55:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2094:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2094:74:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2094:74:3" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2018:9:3", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2029:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2040:4:3", - "type": "" - } - ], - "src": "1948:226:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2278:149:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2288:26:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2300:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2311:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2296:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2296:18:3" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2288:4:3" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2330:9:3" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2345:6:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2353:66:3", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2341:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2341:79:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2323:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2323:98:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2323:98:3" - } - ] - }, - "name": "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2247:9:3", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2258:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2269:4:3", - "type": "" - } - ], - "src": "2179:248:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2510:199:3", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2556:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2565:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2568:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2558:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2558:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2558:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2531:7:3" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2540:9:3" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2527:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2527:23:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2552:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2523:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2523:32:3" - }, - "nodeType": "YulIf", - "src": "2520:52:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2581:29:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2600:9:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2594:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "2594:16:3" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2585:5:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2663:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2672:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2675:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2665:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2665:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2665:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2632:5:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2653:5:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2646:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2646:13:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2639:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2639:21:3" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2629:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "2629:32:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2622:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2622:40:3" - }, - "nodeType": "YulIf", - "src": "2619:60:3" - }, - { - "nodeType": "YulAssignment", - "src": "2688:15:3", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2698:5:3" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2688:6:3" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2476:9:3", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2487:7:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2499:6:3", - "type": "" - } - ], - "src": "2432:277:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2888:164:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2905:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2916:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2898:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2898:21:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2898:21:3" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2939:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2950:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2935:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2935:18:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2955:2:3", - "type": "", - "value": "14" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2928:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2928:30:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2928:30:3" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2978:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2989:2:3", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2974:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2974:18:3" - }, - { - "hexValue": "4e4f545f415554484f52495a4544", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2994:16:3", - "type": "", - "value": "NOT_AUTHORIZED" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2967:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2967:44:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2967:44:3" - }, - { - "nodeType": "YulAssignment", - "src": "3020:26:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3032:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3043:2:3", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3028:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "3028:18:3" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3020:4:3" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2865:9:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2879:4:3", - "type": "" - } - ], - "src": "2714:338:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3194:289:3", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3204:27:3", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3224:6:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3218:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "3218:13:3" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3208:6:3", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3240:10:3", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3249:1:3", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "3244:1:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3311:77:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3336:3:3" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3341:1:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3332:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "3332:11:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3359:6:3" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3367:1:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3355:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "3355:14:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3371:4:3", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3351:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "3351:25:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3345:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "3345:32:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3325:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "3325:53:3" - }, - "nodeType": "YulExpressionStatement", - "src": "3325:53:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3270:1:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3273:6:3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3267:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "3267:13:3" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "3281:21:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3283:17:3", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3292:1:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3295:4:3", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3288:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "3288:12:3" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3283:1:3" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "3263:3:3", - "statements": [] - }, - "src": "3259:129:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3414:31:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3427:3:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3432:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3423:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "3423:16:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3441:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3416:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "3416:27:3" - }, - "nodeType": "YulExpressionStatement", - "src": "3416:27:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3403:1:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3406:6:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3400:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "3400:13:3" - }, - "nodeType": "YulIf", - "src": "3397:48:3" - }, - { - "nodeType": "YulAssignment", - "src": "3454:23:3", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3465:3:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3470:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3461:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "3461:16:3" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3454:3:3" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3170:3:3", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3175:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3186:3:3", - "type": "" - } - ], - "src": "3057:426:3" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_stringliteral_ef8a4c3fcfbfa959f184421d0ef9a577b18116cafbc5879aff4e2f1881c7c1f0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 14)\n mstore(add(headStart, 64), \"ETHER_REJECTED\")\n tail := add(headStart, 96)\n }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n value1 := add(_2, 32)\n value2 := length\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff00000000000000000000000000000000000000000000000000000000))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 14)\n mstore(add(headStart, 64), \"NOT_AUTHORIZED\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n let i := 0\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n }\n if gt(i, length) { mstore(add(pos, length), 0) }\n end := add(pos, length)\n }\n}", - "id": 3, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4F1EF286 GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x13C JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x176 JUMPI PUSH2 0xCA JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x109 JUMPI PUSH2 0xCA JUMP JUMPDEST CALLDATASIZE PUSH2 0xCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45544845525F52454A4543544544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xD2 PUSH2 0x196 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF4 PUSH2 0xEF CALLDATASIZE PUSH1 0x4 PUSH2 0x806 JUMP JUMPDEST PUSH2 0x1E1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x115 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x124 CALLDATASIZE PUSH1 0x4 PUSH2 0x871 JUMP JUMPDEST PUSH2 0x3AF JUMP JUMPDEST PUSH2 0xD2 PUSH2 0x137 CALLDATASIZE PUSH1 0x4 PUSH2 0x88C JUMP JUMPDEST PUSH2 0x481 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x148 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x151 PUSH2 0x57C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x100 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x191 CALLDATASIZE PUSH1 0x4 PUSH2 0x871 JUMP JUMPDEST PUSH2 0x5AB JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x0 CALLDATASIZE DUP2 DUP3 CALLDATACOPY DUP1 DUP2 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP4 RETURNDATACOPY DUP3 DUP1 ISZERO PUSH2 0x1D7 JUMPI DUP2 DUP4 RETURN JUMPDEST DUP2 DUP4 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ DUP1 PUSH2 0x274 JUMPI POP PUSH32 0x7F5828D000000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST ISZERO PUSH2 0x281 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND EQ ISZERO PUSH2 0x2B3 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x40 MLOAD PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x1FFC9A7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x39B JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x398 SWAP2 DUP2 ADD SWAP1 PUSH2 0x90F JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x3A8 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x465 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x47E DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x66A JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x537 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x577 DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x66A SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5A6 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x661 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x47E DUP2 PUSH2 0x759 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH2 0x577 JUMPI PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x705 SWAP2 SWAP1 PUSH2 0x931 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x740 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x745 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x1DB JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x783 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x818 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x3A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x86C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x883 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3A8 DUP3 PUSH2 0x848 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8AA DUP5 PUSH2 0x848 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x8C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x8EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x8FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x921 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x952 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x938 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x961 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE6 0x49 0xC3 PUSH29 0x69D6249070369BE01F33AF3368FCDCEA9814421A048306C2829C125964 PUSH20 0x6F6C634300080A00330000000000000000000000 ", - "sourceMap": "236:3020:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;488:24:2;;;;;216:2:3;488:24:2;;;198:21:3;255:2;235:18;;;228:30;294:16;274:18;;;267:44;328:18;;488:24:2;;;;;;;;236:3020:0;593:11:2;:9;:11::i;:::-;236:3020:0;1018:877;;;;;;;;;;-1:-1:-1;1018:877:0;;;;;:::i;:::-;;:::i;:::-;;;859:14:3;;852:22;834:41;;822:2;807:18;1018:877:0;;;;;;;;2007:123;;;;;;;;;;-1:-1:-1;2007:123:0;;;;;:::i;:::-;;:::i;2136:161::-;;;;;;:::i;:::-;;:::i;931:81::-;;;;;;;;;;;;;:::i;:::-;;;2124:42:3;2112:55;;;2094:74;;2082:2;2067:18;931:81:0;1948:226:3;1901:100:0;;;;;;;;;;-1:-1:-1;1901:100:0;;;;;:::i;:::-;;:::i;731:640:2:-;894:66;888:73;992:3;997:14;992:3;;974:38;992:3;;997:14;992:3;1060:21;1053:5;1040:69;1025:84;;1135:16;1185:5;992:3;;1164:27;1211:7;1231:55;;;;1335:5;992:3;1325:16;1231:55;1266:5;992:3;1256:16;1204:151;;;;;731:640::o;1018:877:0:-;1079:4;1099:16;;;;;;:36;;-1:-1:-1;1119:16:0;;;;;1099:36;1095:78;;;-1:-1:-1;1158:4:0;;1018:877;-1:-1:-1;1018:877:0:o;1095:78::-;1186:16;;;;;1182:59;;;-1:-1:-1;1225:5:0;;1018:877;-1:-1:-1;1018:877:0:o;1182:59::-;1394:66;1388:73;1746:36;;;;;2353:66:3;2341:79;;1746:36:0;;;2323:98:3;1746:32:0;;;;;;2296:18:3;;1746:36:0;;;;;;;;;;;;;;;;;;-1:-1:-1;1746:36:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1742:147;;-1:-1:-1;1873:5:0;;1018:877;-1:-1:-1;;1018:877:0:o;1742:147::-;1827:7;1018:877;-1:-1:-1;;;1018:877:0:o;2007:123::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;2916:2:3;2449:49:0;;;2898:21:3;2955:2;2935:18;;;2928:30;2994:16;2974:18;;;2967:44;3028:18;;2449:49:0;2714:338:3;2449:49:0;2082:41:::1;2101:17;2082:41;;;;;;;;;;;::::0;:18:::1;:41::i;:::-;2007:123:::0;:::o;2136:161::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;2916:2:3;2449:49:0;;;2898:21:3;2955:2;2935:18;;;2928:30;2994:16;2974:18;;;2967:44;3028:18;;2449:49:0;2714:338:3;2449:49:0;2247:43:::1;2266:17;2285:4;;2247:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2247:18:0::1;::::0;-1:-1:-1;;;2247:43:0:i:1;:::-;2136:161:::0;;;:::o;931:81::-;971:7;997:8;2819:66;2813:73;;2636:266;997:8;990:15;;931:81;:::o;1901:100::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;2916:2:3;2449:49:0;;;2898:21:3;2955:2;2935:18;;;2928:30;2994:16;2974:18;;;2967:44;3028:18;;2449:49:0;2714:338:3;2449:49:0;1975:19:::1;1985:8;1975:9;:19::i;1377:1068:2:-:0;1630:66;1624:73;;1805:93;;;;1923:69;;;;;;;;;;;;;1470:30;;1923:69;2007:11;;:15;2003:436;;2039:12;2057:17;:30;;2088:4;2057:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:55;;;2112:7;2107:322;;2278:16;2336:14;2333:1;;2315:36;2382:14;2333:1;2372:25;2908:346:0;2964:21;2988:8;2819:66;2813:73;;2636:266;2988:8;2964:32;;3169:8;3101:66;3094:84;3238:8;3202:45;;3223:13;3202:45;;;;;;;;;;;;2954:300;2908:346;:::o;357:332:3:-;415:6;468:2;456:9;447:7;443:23;439:32;436:52;;;484:1;481;474:12;436:52;523:9;510:23;573:66;566:5;562:78;555:5;552:89;542:117;;655:1;652;645:12;886:196;954:20;;1014:42;1003:54;;993:65;;983:93;;1072:1;1069;1062:12;983:93;886:196;;;:::o;1087:186::-;1146:6;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1238:29;1257:9;1238:29;:::i;1278:665::-;1357:6;1365;1373;1426:2;1414:9;1405:7;1401:23;1397:32;1394:52;;;1442:1;1439;1432:12;1394:52;1465:29;1484:9;1465:29;:::i;:::-;1455:39;;1545:2;1534:9;1530:18;1517:32;1568:18;1609:2;1601:6;1598:14;1595:34;;;1625:1;1622;1615:12;1595:34;1663:6;1652:9;1648:22;1638:32;;1708:7;1701:4;1697:2;1693:13;1689:27;1679:55;;1730:1;1727;1720:12;1679:55;1770:2;1757:16;1796:2;1788:6;1785:14;1782:34;;;1812:1;1809;1802:12;1782:34;1857:7;1852:2;1843:6;1839:2;1835:15;1831:24;1828:37;1825:57;;;1878:1;1875;1868:12;1825:57;1909:2;1905;1901:11;1891:21;;1931:6;1921:16;;;;;1278:665;;;;;:::o;2432:277::-;2499:6;2552:2;2540:9;2531:7;2527:23;2523:32;2520:52;;;2568:1;2565;2558:12;2520:52;2600:9;2594:16;2653:5;2646:13;2639:21;2632:5;2629:32;2619:60;;2675:1;2672;2665:12;3057:426;3186:3;3224:6;3218:13;3249:1;3259:129;3273:6;3270:1;3267:13;3259:129;;;3371:4;3355:14;;;3351:25;;3345:32;3332:11;;;3325:53;3288:12;3259:129;;;3406:6;3403:1;3400:13;3397:48;;;3441:1;3432:6;3427:3;3423:16;3416:27;3397:48;-1:-1:-1;3461:16:3;;;;;3057:426;-1:-1:-1;;3057:426:3:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "493200", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite", - "owner()": "2361", - "supportsInterface(bytes4)": "infinite", - "transferOwnership(address)": "28278", - "upgradeTo(address)": "28306", - "upgradeToAndCall(address,bytes)": "infinite" - }, - "internal": { - "_owner()": "infinite", - "_setOwner(address)": "25799" - } - }, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "supportsInterface(bytes4)": "01ffc9a7", - "transferOwnership(address)": "f2fde38b", - "upgradeTo(address)": "3659cfe6", - "upgradeToAndCall(address,bytes)": "4f1ef286" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"ownerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousImplementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ProxyImplementationUpdated\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"id\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Proxy implementing EIP173 for ownership management\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/EIP173Proxy.sol\":\"EIP173Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/proxy/EIP173Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xa52a027d9e3ad599c98da343572c0f8e16d65551d6fa0ab218e9e2d0f76e2ab0\",\"license\":\"MIT\"},\"solc_0.8/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x68c8cf1a340a53d31de8ed808bb66d64e83d50b20d80a0b2dff6aba903cebc98\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Proxy implementing EIP173 for ownership management", - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "4a46ee6c1a29be400c9fab1ecc28e172" -} \ No newline at end of file diff --git a/extendedArtifacts/EIP173ProxyWithReceive.json b/extendedArtifacts/EIP173ProxyWithReceive.json deleted file mode 100644 index 4ae250a..0000000 --- a/extendedArtifacts/EIP173ProxyWithReceive.json +++ /dev/null @@ -1,4418 +0,0 @@ -{ - "contractName": "EIP173ProxyWithReceive", - "sourceName": "solc_0.8/proxy/EIP173ProxyWithReceive.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "implementationAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "ownerAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ProxyImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "id", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405260405162000c7238038062000c72833981016040819052620000269162000202565b82828262000034826200004c565b620000408382620000be565b50505050505062000300565b60006200006660008051602062000c528339815191525490565b90508160008051602062000c5283398151915255816001600160a01b0316816001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8054908390556040516001600160a01b0380851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a38151156200019b576000836001600160a01b031683604051620001429190620002e2565b600060405180830381855af49150503d80600081146200017f576040519150601f19603f3d011682016040523d82523d6000602084013e62000184565b606091505b505090508062000199573d806000803e806000fd5b505b505050565b80516001600160a01b0381168114620001b857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001f0578181015183820152602001620001d6565b83811115620001995750506000910152565b6000806000606084860312156200021857600080fd5b6200022384620001a0565b92506200023360208501620001a0565b60408501519092506001600160401b03808211156200025157600080fd5b818601915086601f8301126200026657600080fd5b8151818111156200027b576200027b620001bd565b604051601f8201601f19908116603f01168101908382118183101715620002a657620002a6620001bd565b81604052828152896020848701011115620002c057600080fd5b620002d3836020830160208801620001d3565b80955050505050509250925092565b60008251620002f6818460208701620001d3565b9190910192915050565b61094280620003106000396000f3fe60806040526004361061005e5760003560e01c80634f1ef286116100435780634f1ef286146100c45780638da5cb5b146100d7578063f2fde38b1461011157610065565b806301ffc9a71461006f5780633659cfe6146100a457610065565b3661006557005b61006d610131565b005b34801561007b57600080fd5b5061008f61008a3660046107a6565b61017c565b60405190151581526020015b60405180910390f35b3480156100b057600080fd5b5061006d6100bf366004610811565b61034a565b61006d6100d236600461082c565b610421565b3480156100e357600080fd5b506100ec61051c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161009b565b34801561011d57600080fd5b5061006d61012c366004610811565b61054b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460003681823780813683855af491503d8082833e828015610172578183f35b8183fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061020f57507f7f5828d0000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b1561021c57506001919050565b7fffffffff00000000000000000000000000000000000000000000000000000000808316141561024e57506000919050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008416600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa925050508015610336575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610333918101906108af565b60015b6103435750600092915050565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610405576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b61041e816040518060200160405280600081525061060a565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016103fc565b6105178383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061060a92505050565b505050565b60006105467fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905090565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610601576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016103fc565b61041e816106f9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80549083905560405173ffffffffffffffffffffffffffffffffffffffff80851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a38151156105175760008373ffffffffffffffffffffffffffffffffffffffff16836040516106a591906108d1565b600060405180830381855af49150503d80600081146106e0576040519150601f19603f3d011682016040523d82523d6000602084013e6106e5565b606091505b5050905080610176573d806000803e806000fd5b60006107237fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b9050817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000602082840312156107b857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461034357600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461080c57600080fd5b919050565b60006020828403121561082357600080fd5b610343826107e8565b60008060006040848603121561084157600080fd5b61084a846107e8565b9250602084013567ffffffffffffffff8082111561086757600080fd5b818601915086601f83011261087b57600080fd5b81358181111561088a57600080fd5b87602082850101111561089c57600080fd5b6020830194508093505050509250925092565b6000602082840312156108c157600080fd5b8151801515811461034357600080fd5b6000825160005b818110156108f257602081860181015185830152016108d8565b81811115610901576000828501525b50919091019291505056fea264697066735822122025d617949212f6e25493444995ffdc8648140fd8579de6638be329eb1483050f64736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", - "deployedBytecode": "0x60806040526004361061005e5760003560e01c80634f1ef286116100435780634f1ef286146100c45780638da5cb5b146100d7578063f2fde38b1461011157610065565b806301ffc9a71461006f5780633659cfe6146100a457610065565b3661006557005b61006d610131565b005b34801561007b57600080fd5b5061008f61008a3660046107a6565b61017c565b60405190151581526020015b60405180910390f35b3480156100b057600080fd5b5061006d6100bf366004610811565b61034a565b61006d6100d236600461082c565b610421565b3480156100e357600080fd5b506100ec61051c565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161009b565b34801561011d57600080fd5b5061006d61012c366004610811565b61054b565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460003681823780813683855af491503d8082833e828015610172578183f35b8183fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061020f57507f7f5828d0000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b1561021c57506001919050565b7fffffffff00000000000000000000000000000000000000000000000000000000808316141561024e57506000919050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008416600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa925050508015610336575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610333918101906108af565b60015b6103435750600092915050565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610405576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b61041e816040518060200160405280600081525061060a565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016103fc565b6105178383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061060a92505050565b505050565b60006105467fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905090565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610601576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016103fc565b61041e816106f9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80549083905560405173ffffffffffffffffffffffffffffffffffffffff80851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a38151156105175760008373ffffffffffffffffffffffffffffffffffffffff16836040516106a591906108d1565b600060405180830381855af49150503d80600081146106e0576040519150601f19603f3d011682016040523d82523d6000602084013e6106e5565b606091505b5050905080610176573d806000803e806000fd5b60006107237fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b9050817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000602082840312156107b857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461034357600080fd5b803573ffffffffffffffffffffffffffffffffffffffff8116811461080c57600080fd5b919050565b60006020828403121561082357600080fd5b610343826107e8565b60008060006040848603121561084157600080fd5b61084a846107e8565b9250602084013567ffffffffffffffff8082111561086757600080fd5b818601915086601f83011261087b57600080fd5b81358181111561088a57600080fd5b87602082850101111561089c57600080fd5b6020830194508093505050509250925092565b6000602082840312156108c157600080fd5b8151801515811461034357600080fd5b6000825160005b818110156108f257602081860181015185830152016108d8565b81811115610901576000828501525b50919091019291505056fea264697066735822122025d617949212f6e25493444995ffdc8648140fd8579de6638be329eb1483050f64736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_193": { - "entryPoint": null, - "id": 193, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_38": { - "entryPoint": null, - "id": 38, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_owner_154": { - "entryPoint": null, - "id": 154, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_263": { - "entryPoint": 190, - "id": 263, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setOwner_171": { - "entryPoint": 76, - "id": 171, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 416, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 514, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 738, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 467, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 445, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1925:3", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:3", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:117:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "84:22:3", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "99:6:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "93:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "93:13:3" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "84:5:3" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "169:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "178:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "181:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "171:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "171:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "171:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "128:5:3" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "139:5:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "154:3:3", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:3", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "150:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "150:11:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "163:1:3", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "146:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "146:19:3" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "135:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "135:31:3" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "125:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "125:42:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "118:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "118:50:3" - }, - "nodeType": "YulIf", - "src": "115:70:3" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:3", - "type": "" - } - ], - "src": "14:177:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "228:95:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "245:1:3", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:3:3", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "257:10:3", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "248:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "248:20:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "238:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "238:31:3" - }, - "nodeType": "YulExpressionStatement", - "src": "238:31:3" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "285:1:3", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "288:4:3", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "278:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "278:15:3" - }, - "nodeType": "YulExpressionStatement", - "src": "278:15:3" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:4:3", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "302:15:3" - }, - "nodeType": "YulExpressionStatement", - "src": "302:15:3" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "196:127:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "381:205:3", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "391:10:3", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "400:1:3", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "395:1:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "460:63:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "485:3:3" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "490:1:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "481:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "481:11:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "504:3:3" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "509:1:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "500:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "500:11:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "494:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "494:18:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "474:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "474:39:3" - }, - "nodeType": "YulExpressionStatement", - "src": "474:39:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "421:1:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "424:6:3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "418:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "418:13:3" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "432:19:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "434:15:3", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "443:1:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "446:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "439:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "439:10:3" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "434:1:3" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "414:3:3", - "statements": [] - }, - "src": "410:113:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "549:31:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "562:3:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "567:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "558:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "558:16:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "576:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "551:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "551:27:3" - }, - "nodeType": "YulExpressionStatement", - "src": "551:27:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "538:1:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "541:6:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "535:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "535:13:3" - }, - "nodeType": "YulIf", - "src": "532:48:3" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "359:3:3", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "364:3:3", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "369:6:3", - "type": "" - } - ], - "src": "328:258:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "715:929:3", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "761:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "770:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "773:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "763:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "763:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "763:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "736:7:3" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "745:9:3" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "732:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "732:23:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "757:2:3", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "728:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "728:32:3" - }, - "nodeType": "YulIf", - "src": "725:52:3" - }, - { - "nodeType": "YulAssignment", - "src": "786:50:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "826:9:3" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "796:29:3" - }, - "nodeType": "YulFunctionCall", - "src": "796:40:3" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "786:6:3" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "845:59:3", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "889:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "900:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "885:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "885:18:3" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "855:29:3" - }, - "nodeType": "YulFunctionCall", - "src": "855:49:3" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "845:6:3" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "913:39:3", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "937:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "948:2:3", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "933:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "933:18:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "927:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "927:25:3" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "917:6:3", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "961:28:3", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "979:2:3", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "983:1:3", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "975:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "975:10:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "987:1:3", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "971:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "971:18:3" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "965:2:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1016:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1025:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1028:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1018:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1018:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1018:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1004:6:3" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1012:2:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1001:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1001:14:3" - }, - "nodeType": "YulIf", - "src": "998:34:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1041:32:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1055:9:3" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1066:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1051:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1051:22:3" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1045:2:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1121:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1130:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1133:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1123:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1123:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1123:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1100:2:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1104:4:3", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1096:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1096:13:3" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1111:7:3" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1092:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1092:27:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1085:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1085:35:3" - }, - "nodeType": "YulIf", - "src": "1082:55:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1146:19:3", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1162:2:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1156:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "1156:9:3" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1150:2:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1188:22:3", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1190:16:3" - }, - "nodeType": "YulFunctionCall", - "src": "1190:18:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1190:18:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1180:2:3" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1184:2:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1177:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1177:10:3" - }, - "nodeType": "YulIf", - "src": "1174:36:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1219:17:3", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1233:2:3", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1229:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1229:7:3" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1223:2:3", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1245:23:3", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1265:2:3", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1259:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "1259:9:3" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1249:6:3", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1277:71:3", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1299:6:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1323:2:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1327:4:3", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1319:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1319:13:3" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1334:2:3" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1315:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1315:22:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1339:2:3", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1311:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1311:31:3" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1344:2:3" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1307:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1307:40:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1295:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1295:53:3" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1281:10:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1407:22:3", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1409:16:3" - }, - "nodeType": "YulFunctionCall", - "src": "1409:18:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1409:18:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1366:10:3" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1378:2:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1363:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1363:18:3" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1386:10:3" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1398:6:3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1383:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1383:22:3" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1360:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1360:46:3" - }, - "nodeType": "YulIf", - "src": "1357:72:3" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1445:2:3", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1449:10:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1438:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1438:22:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1438:22:3" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1476:6:3" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1484:2:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1469:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1469:18:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1469:18:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1533:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1542:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1545:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1535:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1535:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1535:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1510:2:3" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1514:2:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1506:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1506:11:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1519:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1502:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1502:20:3" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1524:7:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1499:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1499:33:3" - }, - "nodeType": "YulIf", - "src": "1496:53:3" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1584:2:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1588:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1580:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1580:11:3" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1597:6:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1605:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1593:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1593:15:3" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1610:2:3" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1558:21:3" - }, - "nodeType": "YulFunctionCall", - "src": "1558:55:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1558:55:3" - }, - { - "nodeType": "YulAssignment", - "src": "1622:16:3", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1632:6:3" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1622:6:3" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "665:9:3", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "676:7:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "688:6:3", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "696:6:3", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "704:6:3", - "type": "" - } - ], - "src": "591:1053:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1786:137:3", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1796:27:3", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1816:6:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1810:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "1810:13:3" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1800:6:3", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1858:6:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1866:4:3", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1854:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1854:17:3" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1873:3:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1878:6:3" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1832:21:3" - }, - "nodeType": "YulFunctionCall", - "src": "1832:53:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1832:53:3" - }, - { - "nodeType": "YulAssignment", - "src": "1894:23:3", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1905:3:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1910:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1901:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1901:16:3" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1894:3:3" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1762:3:3", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1767:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1778:3:3", - "type": "" - } - ], - "src": "1649:274:3" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n let offset := mload(add(headStart, 64))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value2 := memPtr\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n}", - "id": 3, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xC72 CODESIZE SUB DUP1 PUSH3 0xC72 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x202 JUMP JUMPDEST DUP3 DUP3 DUP3 PUSH3 0x34 DUP3 PUSH3 0x4C JUMP JUMPDEST PUSH3 0x40 DUP4 DUP3 PUSH3 0xBE JUMP JUMPDEST POP POP POP POP POP POP PUSH3 0x300 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x66 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xC52 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xC52 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH3 0x19B JUMPI PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD PUSH3 0x142 SWAP2 SWAP1 PUSH3 0x2E2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x17F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x184 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH3 0x199 JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x1F0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x1D6 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x199 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x218 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x223 DUP5 PUSH3 0x1A0 JUMP JUMPDEST SWAP3 POP PUSH3 0x233 PUSH1 0x20 DUP6 ADD PUSH3 0x1A0 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x251 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x266 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x27B JUMPI PUSH3 0x27B PUSH3 0x1BD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x2A6 JUMPI PUSH3 0x2A6 PUSH3 0x1BD JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x2C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2D3 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x1D3 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x2F6 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x1D3 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x942 DUP1 PUSH3 0x310 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4F1EF286 GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0xC4 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x111 JUMPI PUSH2 0x65 JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0xA4 JUMPI PUSH2 0x65 JUMP JUMPDEST CALLDATASIZE PUSH2 0x65 JUMPI STOP JUMPDEST PUSH2 0x6D PUSH2 0x131 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8F PUSH2 0x8A CALLDATASIZE PUSH1 0x4 PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x17C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D PUSH2 0xBF CALLDATASIZE PUSH1 0x4 PUSH2 0x811 JUMP JUMPDEST PUSH2 0x34A JUMP JUMPDEST PUSH2 0x6D PUSH2 0xD2 CALLDATASIZE PUSH1 0x4 PUSH2 0x82C JUMP JUMPDEST PUSH2 0x421 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xEC PUSH2 0x51C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D PUSH2 0x12C CALLDATASIZE PUSH1 0x4 PUSH2 0x811 JUMP JUMPDEST PUSH2 0x54B JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x0 CALLDATASIZE DUP2 DUP3 CALLDATACOPY DUP1 DUP2 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP4 RETURNDATACOPY DUP3 DUP1 ISZERO PUSH2 0x172 JUMPI DUP2 DUP4 RETURN JUMPDEST DUP2 DUP4 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ DUP1 PUSH2 0x20F JUMPI POP PUSH32 0x7F5828D000000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST ISZERO PUSH2 0x21C JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND EQ ISZERO PUSH2 0x24E JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x40 MLOAD PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x1FFC9A7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x336 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x333 SWAP2 DUP2 ADD SWAP1 PUSH2 0x8AF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x343 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x405 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x41E DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x60A JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4D7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3FC JUMP JUMPDEST PUSH2 0x517 DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x60A SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x546 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x601 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3FC JUMP JUMPDEST PUSH2 0x41E DUP2 PUSH2 0x6F9 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH2 0x517 JUMPI PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x6A5 SWAP2 SWAP1 PUSH2 0x8D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6E0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x176 JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x723 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x80C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x823 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x343 DUP3 PUSH2 0x7E8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x841 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x84A DUP5 PUSH2 0x7E8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x867 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x87B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x88A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x89C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8D8 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x901 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 0xD6 OR SWAP5 SWAP3 SLT 0xF6 0xE2 SLOAD SWAP4 DIFFICULTY 0x49 SWAP6 SELFDESTRUCT 0xDC DUP7 BASEFEE EQ 0xF 0xD8 JUMPI SWAP14 0xE6 PUSH4 0x8BE329EB EQ DUP4 SDIV 0xF PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER 0xB5 BALANCE 0x27 PUSH9 0x4A568B3173AE13B9F8 0xA6 ADD PUSH15 0x243E63B6E8EE1178D6A717850B5D61 SUB ", - "sourceMap": "176:278:1:-:0;;;229:179;;;;;;;;;;;;;;;;;;:::i;:::-;363:21;386:12;400:4;723:23:0;386:12:1;723:9:0;:23::i;:::-;756:47;775:21;798:4;756:18;:47::i;:::-;591:219;;;229:179:1;;;176:278;;2908:346:0;2964:21;2988:8;-1:-1:-1;;;;;;;;;;;2813:73:0;;2636:266;2988:8;2964:32;;3169:8;-1:-1:-1;;;;;;;;;;;3094:84:0;3238:8;-1:-1:-1;;;;;3202:45:0;3223:13;-1:-1:-1;;;;;3202:45:0;;;;;;;;;;;2954:300;2908:346;:::o;1377:1068:2:-;1630:66;1624:73;;1805:93;;;;1923:69;;-1:-1:-1;;;;;1923:69:2;;;;;;;;;;1470:30;;1923:69;2007:11;;:15;2003:436;;2039:12;2057:17;-1:-1:-1;;;;;2057:30:2;2088:4;2057:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:55;;;2112:7;2107:322;;2278:16;2336:14;2333:1;;2315:36;2382:14;2333:1;2372:25;2107:322;2024:415;2003:436;1460:985;1377:1068;;:::o;14:177:3:-;93:13;;-1:-1:-1;;;;;135:31:3;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:258;400:1;410:113;424:6;421:1;418:13;410:113;;;500:11;;;494:18;481:11;;;474:39;446:2;439:10;410:113;;;541:6;538:1;535:13;532:48;;;-1:-1:-1;;576:1:3;558:16;;551:27;328:258::o;591:1053::-;688:6;696;704;757:2;745:9;736:7;732:23;728:32;725:52;;;773:1;770;763:12;725:52;796:40;826:9;796:40;:::i;:::-;786:50;;855:49;900:2;889:9;885:18;855:49;:::i;:::-;948:2;933:18;;927:25;845:59;;-1:-1:-1;;;;;;1001:14:3;;;998:34;;;1028:1;1025;1018:12;998:34;1066:6;1055:9;1051:22;1041:32;;1111:7;1104:4;1100:2;1096:13;1092:27;1082:55;;1133:1;1130;1123:12;1082:55;1162:2;1156:9;1184:2;1180;1177:10;1174:36;;;1190:18;;:::i;:::-;1265:2;1259:9;1233:2;1319:13;;-1:-1:-1;;1315:22:3;;;1339:2;1311:31;1307:40;1295:53;;;1363:18;;;1383:22;;;1360:46;1357:72;;;1409:18;;:::i;:::-;1449:10;1445:2;1438:22;1484:2;1476:6;1469:18;1524:7;1519:2;1514;1510;1506:11;1502:20;1499:33;1496:53;;;1545:1;1542;1535:12;1496:53;1558:55;1610:2;1605;1597:6;1593:15;1588:2;1584;1580:11;1558:55;:::i;:::-;1632:6;1622:16;;;;;;;591:1053;;;;;:::o;1649:274::-;1778:3;1816:6;1810:13;1832:53;1878:6;1873:3;1866:4;1858:6;1854:17;1832:53;:::i;:::-;1901:16;;;;;1649:274;-1:-1:-1;;1649:274:3:o;:::-;176:278:1;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_198": { - "entryPoint": null, - "id": 198, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_222": { - "entryPoint": null, - "id": 222, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_fallback_227": { - "entryPoint": 305, - "id": 227, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_owner_154": { - "entryPoint": null, - "id": 154, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_263": { - "entryPoint": 1546, - "id": 263, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setOwner_171": { - "entryPoint": 1785, - "id": 171, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@owner_47": { - "entryPoint": 1308, - "id": 47, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@supportsInterface_94": { - "entryPoint": 380, - "id": 94, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@transferOwnership_106": { - "entryPoint": 1355, - "id": 106, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@upgradeToAndCall_134": { - "entryPoint": 1057, - "id": 134, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@upgradeTo_119": { - "entryPoint": 842, - "id": 119, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 2024, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 2065, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_calldata_ptr": { - "entryPoint": 2092, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 2223, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes4": { - "entryPoint": 1958, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 2257, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3142:3", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:3", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "83:263:3", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "129:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "138:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "141:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "131:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "131:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "131:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "104:7:3" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "113:9:3" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "100:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "100:23:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "125:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "96:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "96:32:3" - }, - "nodeType": "YulIf", - "src": "93:52:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "154:36:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "180:9:3" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "167:12:3" - }, - "nodeType": "YulFunctionCall", - "src": "167:23:3" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "158:5:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "300:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "302:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "302:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "212:5:3" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "223:5:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "230:66:3", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "219:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "219:78:3" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "209:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "209:89:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "202:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "202:97:3" - }, - "nodeType": "YulIf", - "src": "199:117:3" - }, - { - "nodeType": "YulAssignment", - "src": "325:15:3", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "335:5:3" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "325:6:3" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes4", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "49:9:3", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "60:7:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "72:6:3", - "type": "" - } - ], - "src": "14:332:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "446:92:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "456:26:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "468:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "479:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "464:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "464:18:3" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "456:4:3" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "498:9:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "523:6:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "516:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "516:14:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "509:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "509:22:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "491:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "491:41:3" - }, - "nodeType": "YulExpressionStatement", - "src": "491:41:3" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "415:9:3", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "426:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "437:4:3", - "type": "" - } - ], - "src": "351:187:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "592:147:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "602:29:3", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "624:6:3" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "611:12:3" - }, - "nodeType": "YulFunctionCall", - "src": "611:20:3" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "602:5:3" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "717:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "726:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "729:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "719:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "719:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "719:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "653:5:3" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "664:5:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "671:42:3", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "660:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "660:54:3" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "650:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "650:65:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "643:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "643:73:3" - }, - "nodeType": "YulIf", - "src": "640:93:3" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "571:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "582:5:3", - "type": "" - } - ], - "src": "543:196:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "814:116:3", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "860:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "869:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "872:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "862:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "862:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "862:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "835:7:3" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "844:9:3" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "831:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "831:23:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "856:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "827:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "827:32:3" - }, - "nodeType": "YulIf", - "src": "824:52:3" - }, - { - "nodeType": "YulAssignment", - "src": "885:39:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "914:9:3" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "895:18:3" - }, - "nodeType": "YulFunctionCall", - "src": "895:29:3" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "885:6:3" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "780:9:3", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "791:7:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "803:6:3", - "type": "" - } - ], - "src": "744:186:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1041:559:3", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1087:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1096:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1099:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1089:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1089:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1089:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1062:7:3" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1071:9:3" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1058:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1058:23:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1083:2:3", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1054:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1054:32:3" - }, - "nodeType": "YulIf", - "src": "1051:52:3" - }, - { - "nodeType": "YulAssignment", - "src": "1112:39:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1141:9:3" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1122:18:3" - }, - "nodeType": "YulFunctionCall", - "src": "1122:29:3" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1112:6:3" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1160:46:3", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1191:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1202:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1187:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1187:18:3" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1174:12:3" - }, - "nodeType": "YulFunctionCall", - "src": "1174:32:3" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1164:6:3", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1215:28:3", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1225:18:3", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1219:2:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1270:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1279:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1282:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1272:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1272:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1272:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1258:6:3" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1266:2:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1255:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1255:14:3" - }, - "nodeType": "YulIf", - "src": "1252:34:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1295:32:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1309:9:3" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1320:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1305:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1305:22:3" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1299:2:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1375:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1384:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1387:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1377:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1377:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1377:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1354:2:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1358:4:3", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1350:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1350:13:3" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1365:7:3" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1346:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1346:27:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1339:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1339:35:3" - }, - "nodeType": "YulIf", - "src": "1336:55:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1400:30:3", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1427:2:3" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1414:12:3" - }, - "nodeType": "YulFunctionCall", - "src": "1414:16:3" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1404:6:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1457:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1466:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1469:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1459:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1459:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1459:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1445:6:3" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1453:2:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1442:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1442:14:3" - }, - "nodeType": "YulIf", - "src": "1439:34:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1523:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1532:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1535:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1525:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1525:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1525:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1496:2:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1500:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1492:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1492:15:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1509:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1488:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1488:24:3" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1514:7:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1485:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "1485:37:3" - }, - "nodeType": "YulIf", - "src": "1482:57:3" - }, - { - "nodeType": "YulAssignment", - "src": "1548:21:3", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1562:2:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1566:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1558:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1558:11:3" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1548:6:3" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1578:16:3", - "value": { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1588:6:3" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1578:6:3" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "991:9:3", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1002:7:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1014:6:3", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1022:6:3", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "1030:6:3", - "type": "" - } - ], - "src": "935:665:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1706:125:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1716:26:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1728:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1739:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1724:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1724:18:3" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1716:4:3" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1758:9:3" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1773:6:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1781:42:3", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1769:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1769:55:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1751:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1751:74:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1751:74:3" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1675:9:3", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1686:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1697:4:3", - "type": "" - } - ], - "src": "1605:226:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1935:149:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1945:26:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1957:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1968:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1953:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1953:18:3" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1945:4:3" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1987:9:3" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2002:6:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2010:66:3", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1998:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "1998:79:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1980:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "1980:98:3" - }, - "nodeType": "YulExpressionStatement", - "src": "1980:98:3" - } - ] - }, - "name": "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1904:9:3", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1915:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1926:4:3", - "type": "" - } - ], - "src": "1836:248:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2167:199:3", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2213:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2222:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2225:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2215:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2215:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2215:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2188:7:3" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2197:9:3" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2184:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2184:23:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2209:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2180:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2180:32:3" - }, - "nodeType": "YulIf", - "src": "2177:52:3" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2238:29:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2257:9:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2251:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "2251:16:3" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2242:5:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2320:16:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2329:1:3", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2332:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2322:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2322:12:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2322:12:3" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2289:5:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2310:5:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2303:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2303:13:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2296:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2296:21:3" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2286:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "2286:32:3" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2279:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2279:40:3" - }, - "nodeType": "YulIf", - "src": "2276:60:3" - }, - { - "nodeType": "YulAssignment", - "src": "2345:15:3", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2355:5:3" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2345:6:3" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2133:9:3", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2144:7:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2156:6:3", - "type": "" - } - ], - "src": "2089:277:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2545:164:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2562:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2573:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2555:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2555:21:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2555:21:3" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2596:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2607:2:3", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2592:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2592:18:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2612:2:3", - "type": "", - "value": "14" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2585:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2585:30:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2585:30:3" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2635:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2646:2:3", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2631:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2631:18:3" - }, - { - "hexValue": "4e4f545f415554484f52495a4544", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2651:16:3", - "type": "", - "value": "NOT_AUTHORIZED" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2624:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2624:44:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2624:44:3" - }, - { - "nodeType": "YulAssignment", - "src": "2677:26:3", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2689:9:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2700:2:3", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2685:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2685:18:3" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2677:4:3" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2522:9:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2536:4:3", - "type": "" - } - ], - "src": "2371:338:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2851:289:3", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2861:27:3", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2881:6:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2875:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "2875:13:3" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2865:6:3", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2897:10:3", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2906:1:3", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2901:1:3", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2968:77:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2993:3:3" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2998:1:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2989:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2989:11:3" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3016:6:3" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3024:1:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3012:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "3012:14:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3028:4:3", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3008:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "3008:25:3" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3002:5:3" - }, - "nodeType": "YulFunctionCall", - "src": "3002:32:3" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2982:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "2982:53:3" - }, - "nodeType": "YulExpressionStatement", - "src": "2982:53:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2927:1:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2930:6:3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2924:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "2924:13:3" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2938:21:3", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2940:17:3", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2949:1:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2952:4:3", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2945:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "2945:12:3" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2940:1:3" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2920:3:3", - "statements": [] - }, - "src": "2916:129:3" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3071:31:3", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3084:3:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3089:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3080:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "3080:16:3" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3098:1:3", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3073:6:3" - }, - "nodeType": "YulFunctionCall", - "src": "3073:27:3" - }, - "nodeType": "YulExpressionStatement", - "src": "3073:27:3" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3060:1:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3063:6:3" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3057:2:3" - }, - "nodeType": "YulFunctionCall", - "src": "3057:13:3" - }, - "nodeType": "YulIf", - "src": "3054:48:3" - }, - { - "nodeType": "YulAssignment", - "src": "3111:23:3", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3122:3:3" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3127:6:3" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3118:3:3" - }, - "nodeType": "YulFunctionCall", - "src": "3118:16:3" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3111:3:3" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2827:3:3", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2832:6:3", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2843:3:3", - "type": "" - } - ], - "src": "2714:426:3" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n value1 := add(_2, 32)\n value2 := length\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff00000000000000000000000000000000000000000000000000000000))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 14)\n mstore(add(headStart, 64), \"NOT_AUTHORIZED\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n let i := 0\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n }\n if gt(i, length) { mstore(add(pos, length), 0) }\n end := add(pos, length)\n }\n}", - "id": 3, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4F1EF286 GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0xC4 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x111 JUMPI PUSH2 0x65 JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0xA4 JUMPI PUSH2 0x65 JUMP JUMPDEST CALLDATASIZE PUSH2 0x65 JUMPI STOP JUMPDEST PUSH2 0x6D PUSH2 0x131 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8F PUSH2 0x8A CALLDATASIZE PUSH1 0x4 PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x17C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D PUSH2 0xBF CALLDATASIZE PUSH1 0x4 PUSH2 0x811 JUMP JUMPDEST PUSH2 0x34A JUMP JUMPDEST PUSH2 0x6D PUSH2 0xD2 CALLDATASIZE PUSH1 0x4 PUSH2 0x82C JUMP JUMPDEST PUSH2 0x421 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xEC PUSH2 0x51C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x9B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x11D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D PUSH2 0x12C CALLDATASIZE PUSH1 0x4 PUSH2 0x811 JUMP JUMPDEST PUSH2 0x54B JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x0 CALLDATASIZE DUP2 DUP3 CALLDATACOPY DUP1 DUP2 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP4 RETURNDATACOPY DUP3 DUP1 ISZERO PUSH2 0x172 JUMPI DUP2 DUP4 RETURN JUMPDEST DUP2 DUP4 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ DUP1 PUSH2 0x20F JUMPI POP PUSH32 0x7F5828D000000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST ISZERO PUSH2 0x21C JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND EQ ISZERO PUSH2 0x24E JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x40 MLOAD PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x1FFC9A7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x336 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x333 SWAP2 DUP2 ADD SWAP1 PUSH2 0x8AF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x343 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x405 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x41E DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x60A JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4D7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3FC JUMP JUMPDEST PUSH2 0x517 DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x60A SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x546 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x601 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3FC JUMP JUMPDEST PUSH2 0x41E DUP2 PUSH2 0x6F9 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH2 0x517 JUMPI PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x6A5 SWAP2 SWAP1 PUSH2 0x8D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6E0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6E5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x176 JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x723 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x80C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x823 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x343 DUP3 PUSH2 0x7E8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x841 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x84A DUP5 PUSH2 0x7E8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x867 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x87B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x88A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x89C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x343 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x8D8 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x901 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 0xD6 OR SWAP5 SWAP3 SLT 0xF6 0xE2 SLOAD SWAP4 DIFFICULTY 0x49 SWAP6 SELFDESTRUCT 0xDC DUP7 BASEFEE EQ 0xF 0xD8 JUMPI SWAP14 0xE6 PUSH4 0x8BE329EB EQ DUP4 SDIV 0xF PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "176:278:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;593:11:2;:9;:11::i;:::-;176:278:1;1018:877:0;;;;;;;;;;-1:-1:-1;1018:877:0;;;;;:::i;:::-;;:::i;:::-;;;516:14:3;;509:22;491:41;;479:2;464:18;1018:877:0;;;;;;;;2007:123;;;;;;;;;;-1:-1:-1;2007:123:0;;;;;:::i;:::-;;:::i;2136:161::-;;;;;;:::i;:::-;;:::i;931:81::-;;;;;;;;;;;;;:::i;:::-;;;1781:42:3;1769:55;;;1751:74;;1739:2;1724:18;931:81:0;1605:226:3;1901:100:0;;;;;;;;;;-1:-1:-1;1901:100:0;;;;;:::i;:::-;;:::i;731:640:2:-;894:66;888:73;992:3;997:14;992:3;;974:38;992:3;;997:14;992:3;1060:21;1053:5;1040:69;1025:84;;1135:16;1185:5;992:3;;1164:27;1211:7;1231:55;;;;1335:5;992:3;1325:16;1231:55;1266:5;992:3;1256:16;1204:151;;;;;731:640::o;1018:877:0:-;1079:4;1099:16;;;;;;:36;;-1:-1:-1;1119:16:0;;;;;1099:36;1095:78;;;-1:-1:-1;1158:4:0;;1018:877;-1:-1:-1;1018:877:0:o;1095:78::-;1186:16;;;;;1182:59;;;-1:-1:-1;1225:5:0;;1018:877;-1:-1:-1;1018:877:0:o;1182:59::-;1394:66;1388:73;1746:36;;;;;2010:66:3;1998:79;;1746:36:0;;;1980:98:3;1746:32:0;;;;;;1953:18:3;;1746:36:0;;;;;;;;;;;;;;;;;;-1:-1:-1;1746:36:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1742:147;;-1:-1:-1;1873:5:0;;1018:877;-1:-1:-1;;1018:877:0:o;1742:147::-;1827:7;1018:877;-1:-1:-1;;;1018:877:0:o;2007:123::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;2573:2:3;2449:49:0;;;2555:21:3;2612:2;2592:18;;;2585:30;2651:16;2631:18;;;2624:44;2685:18;;2449:49:0;;;;;;;;;2082:41:::1;2101:17;2082:41;;;;;;;;;;;::::0;:18:::1;:41::i;:::-;2007:123:::0;:::o;2136:161::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;2573:2:3;2449:49:0;;;2555:21:3;2612:2;2592:18;;;2585:30;2651:16;2631:18;;;2624:44;2685:18;;2449:49:0;2371:338:3;2449:49:0;2247:43:::1;2266:17;2285:4;;2247:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2247:18:0::1;::::0;-1:-1:-1;;;2247:43:0:i:1;:::-;2136:161:::0;;;:::o;931:81::-;971:7;997:8;2819:66;2813:73;;2636:266;997:8;990:15;;931:81;:::o;1901:100::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;2573:2:3;2449:49:0;;;2555:21:3;2612:2;2592:18;;;2585:30;2651:16;2631:18;;;2624:44;2685:18;;2449:49:0;2371:338:3;2449:49:0;1975:19:::1;1985:8;1975:9;:19::i;1377:1068:2:-:0;1630:66;1624:73;;1805:93;;;;1923:69;;;;;;;;;;;;;1470:30;;1923:69;2007:11;;:15;2003:436;;2039:12;2057:17;:30;;2088:4;2057:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:55;;;2112:7;2107:322;;2278:16;2336:14;2333:1;;2315:36;2382:14;2333:1;2372:25;2908:346:0;2964:21;2988:8;2819:66;2813:73;;2636:266;2988:8;2964:32;;3169:8;3101:66;3094:84;3238:8;3202:45;;3223:13;3202:45;;;;;;;;;;;;2954:300;2908:346;:::o;14:332:3:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:196;611:20;;671:42;660:54;;650:65;;640:93;;729:1;726;719:12;640:93;543:196;;;:::o;744:186::-;803:6;856:2;844:9;835:7;831:23;827:32;824:52;;;872:1;869;862:12;824:52;895:29;914:9;895:29;:::i;935:665::-;1014:6;1022;1030;1083:2;1071:9;1062:7;1058:23;1054:32;1051:52;;;1099:1;1096;1089:12;1051:52;1122:29;1141:9;1122:29;:::i;:::-;1112:39;;1202:2;1191:9;1187:18;1174:32;1225:18;1266:2;1258:6;1255:14;1252:34;;;1282:1;1279;1272:12;1252:34;1320:6;1309:9;1305:22;1295:32;;1365:7;1358:4;1354:2;1350:13;1346:27;1336:55;;1387:1;1384;1377:12;1336:55;1427:2;1414:16;1453:2;1445:6;1442:14;1439:34;;;1469:1;1466;1459:12;1439:34;1514:7;1509:2;1500:6;1496:2;1492:15;1488:24;1485:37;1482:57;;;1535:1;1532;1525:12;1482:57;1566:2;1562;1558:11;1548:21;;1588:6;1578:16;;;;;935:665;;;;;:::o;2089:277::-;2156:6;2209:2;2197:9;2188:7;2184:23;2180:32;2177:52;;;2225:1;2222;2215:12;2177:52;2257:9;2251:16;2310:5;2303:13;2296:21;2289:5;2286:32;2276:60;;2332:1;2329;2322:12;2714:426;2843:3;2881:6;2875:13;2906:1;2916:129;2930:6;2927:1;2924:13;2916:129;;;3028:4;3012:14;;;3008:25;;3002:32;2989:11;;;2982:53;2945:12;2916:129;;;3063:6;3060:1;3057:13;3054:48;;;3098:1;3089:6;3084:3;3080:16;3073:27;3054:48;-1:-1:-1;3118:16:3;;;;;2714:426;-1:-1:-1;;2714:426:3:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "474000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite", - "owner()": "2361", - "supportsInterface(bytes4)": "infinite", - "transferOwnership(address)": "28278", - "upgradeTo(address)": "28306", - "upgradeToAndCall(address,bytes)": "infinite" - } - }, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "supportsInterface(bytes4)": "01ffc9a7", - "transferOwnership(address)": "f2fde38b", - "upgradeTo(address)": "3659cfe6", - "upgradeToAndCall(address,bytes)": "4f1ef286" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"ownerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousImplementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ProxyImplementationUpdated\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"id\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Proxy implementing EIP173 for ownership management that accept ETH via receive\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/EIP173ProxyWithReceive.sol\":\"EIP173ProxyWithReceive\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/proxy/EIP173Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xa52a027d9e3ad599c98da343572c0f8e16d65551d6fa0ab218e9e2d0f76e2ab0\",\"license\":\"MIT\"},\"solc_0.8/proxy/EIP173ProxyWithReceive.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\",\"keccak256\":\"0x360b80cd1907a2f32963e3defe6869b60bc99fd6b21b8ef8f91177ec2dd1956d\",\"license\":\"MIT\"},\"solc_0.8/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x68c8cf1a340a53d31de8ed808bb66d64e83d50b20d80a0b2dff6aba903cebc98\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Proxy implementing EIP173 for ownership management that accept ETH via receive", - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "4a46ee6c1a29be400c9fab1ecc28e172" -} \ No newline at end of file diff --git a/extendedArtifacts/ERC165.json b/extendedArtifacts/ERC165.json deleted file mode 100644 index c7a46a4..0000000 --- a/extendedArtifacts/ERC165.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "contractName": "ERC165", - "sourceName": "solc_0.8/proxy/EIP173Proxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "id", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "supportsInterface(bytes4)": "01ffc9a7" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"id\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/EIP173Proxy.sol\":\"ERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/proxy/EIP173Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xa52a027d9e3ad599c98da343572c0f8e16d65551d6fa0ab218e9e2d0f76e2ab0\",\"license\":\"MIT\"},\"solc_0.8/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x68c8cf1a340a53d31de8ed808bb66d64e83d50b20d80a0b2dff6aba903cebc98\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "4a46ee6c1a29be400c9fab1ecc28e172" -} \ No newline at end of file diff --git a/extendedArtifacts/ERC165Checker.json b/extendedArtifacts/ERC165Checker.json deleted file mode 100644 index 5478b82..0000000 --- a/extendedArtifacts/ERC165Checker.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "contractName": "ERC165Checker", - "sourceName": "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220781382b0b76ea3a0a74f109bde890ad1457004ac9ee96472464cd9d1a058ce0764736f6c634300080a0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220781382b0b76ea3a0a74f109bde890ad1457004ac9ee96472464cd9d1a058ce0764736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Library used to query support of an interface declared via {IERC165}. Note that these functions return the actual result of the query: they do not `revert` if an interface is not supported. It is up to the caller to decide what to do in these cases.", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH25 0x1382B0B76EA3A0A74F109BDE890AD1457004AC9EE96472464C 0xD9 0xD1 LOG0 PC 0xCE SMOD PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "434:4185:1:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;434:4185:1;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH25 0x1382B0B76EA3A0A74F109BDE890AD1457004AC9EE96472464C 0xD9 0xD1 LOG0 PC 0xCE SMOD PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "434:4185:1:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "_supportsERC165Interface(address,bytes4)": "infinite", - "getSupportedInterfaces(address,bytes4[] memory)": "infinite", - "supportsAllInterfaces(address,bytes4[] memory)": "infinite", - "supportsERC165(address)": "infinite", - "supportsInterface(address,bytes4)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library used to query support of an interface declared via {IERC165}. Note that these functions return the actual result of the query: they do not `revert` if an interface is not supported. It is up to the caller to decide what to do in these cases.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\":\"ERC165Checker\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\",\"keccak256\":\"0xf7291d7213336b00ee7edbf7cd5034778dd7b0bda2a7489e664f1e5cacc6c24e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "79de338ba05d5edc12f53c878431817f" -} \ No newline at end of file diff --git a/extendedArtifacts/ERC165Storage.json b/extendedArtifacts/ERC165Storage.json deleted file mode 100644 index 1f657e0..0000000 --- a/extendedArtifacts/ERC165Storage.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "contractName": "ERC165Storage", - "sourceName": "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Storage based implementation of the {IERC165} interface. Contracts may inherit from this and call {_registerInterface} to declare their support of an interface.", - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - } - }, - "stateVariables": { - "_supportedInterfaces": { - "details": "Mapping of interface ids to whether or not it's supported." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "supportsInterface(bytes4)": "01ffc9a7" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Storage based implementation of the {IERC165} interface. Contracts may inherit from this and call {_registerInterface} to declare their support of an interface.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"stateVariables\":{\"_supportedInterfaces\":{\"details\":\"Mapping of interface ids to whether or not it's supported.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\":\"ERC165Storage\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x77bf0086774bab931413c3388d3a0f7d44cf6878965b72147f57bb0fbbf394bd\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 236, - "contract": "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol:ERC165Storage", - "label": "_supportedInterfaces", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_bytes4,t_bool)" - } - ], - "types": { - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" - }, - "t_mapping(t_bytes4,t_bool)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "79de338ba05d5edc12f53c878431817f" -} \ No newline at end of file diff --git a/extendedArtifacts/ERC1967Proxy.json b/extendedArtifacts/ERC1967Proxy.json deleted file mode 100644 index a5d77d6..0000000 --- a/extendedArtifacts/ERC1967Proxy.json +++ /dev/null @@ -1,3985 +0,0 @@ -{ - "contractName": "ERC1967Proxy", - "sourceName": "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405260405161084e38038061084e83398101604081905261002291610349565b61004d60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610417565b600080516020610807833981519152146100695761006961043c565b6100758282600061007c565b50506104a1565b610085836100b2565b6000825111806100925750805b156100ad576100ab83836100f260201b6100291760201c565b505b505050565b6100bb8161011e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606101178383604051806060016040528060278152602001610827602791396101de565b9392505050565b610131816102bc60201b6100551760201c565b6101985760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101bd60008051602061080783398151915260001b6102cb60201b6100711760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606001600160a01b0384163b6102465760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161018f565b600080856001600160a01b0316856040516102619190610452565b600060405180830381855af49150503d806000811461029c576040519150601f19603f3d011682016040523d82523d6000602084013e6102a1565b606091505b5090925090506102b28282866102ce565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102dd575081610117565b8251156102ed5782518084602001fd5b8160405162461bcd60e51b815260040161018f919061046e565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610338578181015183820152602001610320565b838111156100ab5750506000910152565b6000806040838503121561035c57600080fd5b82516001600160a01b038116811461037357600080fd5b60208401519092506001600160401b038082111561039057600080fd5b818501915085601f8301126103a457600080fd5b8151818111156103b6576103b6610307565b604051601f8201601f19908116603f011681019083821181831017156103de576103de610307565b816040528281528860208487010111156103f757600080fd5b61040883602083016020880161031d565b80955050505050509250929050565b60008282101561043757634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825161046481846020870161031d565b9190910192915050565b602081526000825180602084015261048d81604085016020870161031d565b601f01601f19169190910160400192915050565b610357806104b06000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", - "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e3c9348ed6dd2f363e89451207bd8df182bc878dc80d47166301a510c8801e964736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.", - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_155": { - "entryPoint": null, - "id": 155, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setImplementation_224": { - "entryPoint": 286, - "id": 224, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeToAndCall_269": { - "entryPoint": 124, - "id": 269, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_upgradeTo_239": { - "entryPoint": 178, - "id": 239, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@functionDelegateCall_1437": { - "entryPoint": 242, - "id": 1437, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_1472": { - "entryPoint": 478, - "id": 1472, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_1552": { - "entryPoint": 715, - "id": 1552, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_1227": { - "entryPoint": 700, - "id": 1227, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_1503": { - "entryPoint": 718, - "id": 1503, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 841, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 1106, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 1134, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 1047, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 797, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x01": { - "entryPoint": 1084, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 775, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3308:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "46:95:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "63:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "70:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "75:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "66:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "66:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "56:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "56:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "56:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "103:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "106:4:16", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "96:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "96:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "96:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "127:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "130:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "120:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "120:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "120:15:16" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "14:127:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "199:205:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "209:10:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "218:1:16", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "213:1:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "278:63:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "303:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "308:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "299:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "299:11:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "322:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "327:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "318:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "318:11:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "312:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "312:18:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "292:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "292:39:16" - }, - "nodeType": "YulExpressionStatement", - "src": "292:39:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "239:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "242:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "236:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "236:13:16" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "250:19:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "252:15:16", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "261:1:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "264:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "257:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "257:10:16" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "252:1:16" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "232:3:16", - "statements": [] - }, - "src": "228:113:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "367:31:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "380:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "385:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "376:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "376:16:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "394:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "369:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "369:27:16" - }, - "nodeType": "YulExpressionStatement", - "src": "369:27:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "356:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "359:6:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "353:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "353:13:16" - }, - "nodeType": "YulIf", - "src": "350:48:16" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "177:3:16", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "182:3:16", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "187:6:16", - "type": "" - } - ], - "src": "146:258:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "516:943:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "562:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "571:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "574:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "564:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "564:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "564:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "537:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "546:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "533:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "533:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "558:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "529:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "529:32:16" - }, - "nodeType": "YulIf", - "src": "526:52:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "587:29:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "606:9:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "600:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "600:16:16" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "591:5:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "679:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "688:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "691:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "681:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "681:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "681:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "638:5:16" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "649:5:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "664:3:16", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "669:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "660:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "660:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "673:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "656:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "656:19:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "645:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "645:31:16" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "635:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "635:42:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "628:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "628:50:16" - }, - "nodeType": "YulIf", - "src": "625:70:16" - }, - { - "nodeType": "YulAssignment", - "src": "704:15:16", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "714:5:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "704:6:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "728:39:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "752:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "763:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "748:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "748:18:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "742:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "742:25:16" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "732:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "776:28:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "794:2:16", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "798:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "790:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "790:10:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "802:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "786:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "786:18:16" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "780:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "831:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "840:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "843:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "833:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "833:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "833:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "819:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "827:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "816:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "816:14:16" - }, - "nodeType": "YulIf", - "src": "813:34:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "856:32:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "870:9:16" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "881:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "866:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "866:22:16" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "860:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "936:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "945:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "948:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "938:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "938:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "938:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "915:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "919:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "911:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "911:13:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "926:7:16" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "907:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "907:27:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "900:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "900:35:16" - }, - "nodeType": "YulIf", - "src": "897:55:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "961:19:16", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "977:2:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "971:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "971:9:16" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "965:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1003:22:16", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1005:16:16" - }, - "nodeType": "YulFunctionCall", - "src": "1005:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1005:18:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "995:2:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "999:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "992:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "992:10:16" - }, - "nodeType": "YulIf", - "src": "989:36:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1034:17:16", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1048:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1044:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1044:7:16" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1038:2:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1060:23:16", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1080:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1074:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "1074:9:16" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1064:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1092:71:16", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1114:6:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1138:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1142:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1134:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1134:13:16" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1149:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1130:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1130:22:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1154:2:16", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1126:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1126:31:16" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1159:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1122:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1122:40:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1110:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1110:53:16" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1096:10:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1222:22:16", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1224:16:16" - }, - "nodeType": "YulFunctionCall", - "src": "1224:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1224:18:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1181:10:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1193:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1178:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1178:18:16" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1201:10:16" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1213:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1198:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1198:22:16" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1175:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1175:46:16" - }, - "nodeType": "YulIf", - "src": "1172:72:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1260:2:16", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1264:10:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1253:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1253:22:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1253:22:16" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1291:6:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1299:2:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1284:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1284:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1284:18:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1348:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1357:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1360:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1350:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1350:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1350:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1325:2:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1329:2:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1321:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1321:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1334:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1317:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1317:20:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1339:7:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1314:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1314:33:16" - }, - "nodeType": "YulIf", - "src": "1311:53:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1399:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1403:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1395:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1395:11:16" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1412:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1420:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1408:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1408:15:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1425:2:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1373:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "1373:55:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1373:55:16" - }, - { - "nodeType": "YulAssignment", - "src": "1437:16:16", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1447:6:16" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1437:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "474:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "485:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "497:6:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "505:6:16", - "type": "" - } - ], - "src": "409:1050:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1513:173:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1543:111:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1564:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1571:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1576:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1567:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1567:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1557:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1557:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1557:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1608:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1611:4:16", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1601:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1601:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1601:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1636:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1639:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1629:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1629:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1629:15:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1529:1:16" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1532:1:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1526:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1526:8:16" - }, - "nodeType": "YulIf", - "src": "1523:131:16" - }, - { - "nodeType": "YulAssignment", - "src": "1663:17:16", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1675:1:16" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1678:1:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1671:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1671:9:16" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "1663:4:16" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "1495:1:16", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "1498:1:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "1504:4:16", - "type": "" - } - ], - "src": "1464:222:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1723:95:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1740:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1747:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1752:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1743:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1743:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1733:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1733:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1733:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1780:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1783:4:16", - "type": "", - "value": "0x01" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1773:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1773:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1773:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1804:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1807:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1797:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1797:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1797:15:16" - } - ] - }, - "name": "panic_error_0x01", - "nodeType": "YulFunctionDefinition", - "src": "1691:127:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1997:235:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2014:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2025:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2007:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2007:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2007:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2048:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2059:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2044:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2044:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2064:2:16", - "type": "", - "value": "45" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2037:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2037:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2037:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2087:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2098:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2083:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2083:18:16" - }, - { - "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2103:34:16", - "type": "", - "value": "ERC1967: new implementation is n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2076:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2076:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2076:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2158:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2169:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2154:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2154:18:16" - }, - { - "hexValue": "6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2174:15:16", - "type": "", - "value": "ot a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2147:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2147:43:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2147:43:16" - }, - { - "nodeType": "YulAssignment", - "src": "2199:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2211:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2222:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2207:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2207:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2199:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1974:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1988:4:16", - "type": "" - } - ], - "src": "1823:409:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2411:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2428:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2439:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2421:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2421:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2421:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2462:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2473:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2458:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2458:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2478:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2451:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2451:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2451:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2501:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2512:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2497:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2497:18:16" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2517:34:16", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2490:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2490:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2490:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2572:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2583:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2568:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2568:18:16" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2588:8:16", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2561:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2561:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2561:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "2606:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2618:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2629:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2614:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2614:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2606:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2388:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2402:4:16", - "type": "" - } - ], - "src": "2237:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2781:137:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2791:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2811:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2805:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "2805:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2795:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2853:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2861:4:16", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2849:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2849:17:16" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2868:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2873:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "2827:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "2827:53:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2827:53:16" - }, - { - "nodeType": "YulAssignment", - "src": "2889:23:16", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2900:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2905:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2896:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2896:16:16" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2889:3:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2757:3:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2762:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2773:3:16", - "type": "" - } - ], - "src": "2644:274:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3044:262:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3061:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3072:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3054:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3054:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3054:21:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3084:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3104:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3098:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "3098:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3088:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3131:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3142:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3127:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3127:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3147:6:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3120:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3120:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3120:34:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3189:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3197:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3185:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3185:15:16" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3206:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3217:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3202:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3202:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3222:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3163:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "3163:66:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3163:66:16" - }, - { - "nodeType": "YulAssignment", - "src": "3238:62:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3254:9:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3273:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3281:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3269:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3269:15:16" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3290:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "3286:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3286:7:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3265:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3265:29:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3250:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3250:45:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3297:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3246:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3246:54:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3238:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3013:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3024:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3035:4:16", - "type": "" - } - ], - "src": "2923:383:16" - } - ] - }, - "contents": "{\n { }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n let offset := mload(add(headStart, 32))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value1 := memPtr\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n diff := sub(x, y)\n }\n function panic_error_0x01()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x01)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 45)\n mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n mstore(add(headStart, 96), \"ot a contract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x84E CODESIZE SUB DUP1 PUSH2 0x84E DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x349 JUMP JUMPDEST PUSH2 0x4D PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x417 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x807 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH2 0x69 JUMPI PUSH2 0x69 PUSH2 0x43C JUMP JUMPDEST PUSH2 0x75 DUP3 DUP3 PUSH1 0x0 PUSH2 0x7C JUMP JUMPDEST POP POP PUSH2 0x4A1 JUMP JUMPDEST PUSH2 0x85 DUP4 PUSH2 0xB2 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x92 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0xAD JUMPI PUSH2 0xAB DUP4 DUP4 PUSH2 0xF2 PUSH1 0x20 SHL PUSH2 0x29 OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xBB DUP2 PUSH2 0x11E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x117 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x827 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1DE JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x131 DUP2 PUSH2 0x2BC PUSH1 0x20 SHL PUSH2 0x55 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x198 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x1BD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x807 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH2 0x2CB PUSH1 0x20 SHL PUSH2 0x71 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH2 0x246 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x18F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x261 SWAP2 SWAP1 PUSH2 0x452 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x29C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2A1 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2B2 DUP3 DUP3 DUP7 PUSH2 0x2CE JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2DD JUMPI POP DUP2 PUSH2 0x117 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x2ED JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18F SWAP2 SWAP1 PUSH2 0x46E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x338 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x320 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xAB JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x390 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x3B6 JUMPI PUSH2 0x3B6 PUSH2 0x307 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x3DE JUMPI PUSH2 0x3DE PUSH2 0x307 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x3F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x408 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x31D JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x437 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x464 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x31D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x48D DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x31D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x357 DUP1 PUSH2 0x4B0 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x74 JUMP JUMPDEST PUSH2 0xB9 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2FB PUSH1 0x27 SWAP2 CODECOPY PUSH2 0xDD JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB4 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xD8 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x188 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x1B0 SWAP2 SWAP1 PUSH2 0x28D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1F0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x200 DUP3 DUP3 DUP7 PUSH2 0x20A JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x219 JUMPI POP DUP2 PUSH2 0x4E JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x229 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17F SWAP2 SWAP1 PUSH2 0x2A9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x278 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x260 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x287 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x29F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x25D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2C8 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x25D JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x706673582212201E3C93 BASEFEE 0xED PUSH14 0xD2F363E89451207BD8DF182BC878 0xDC DUP1 0xD4 PUSH18 0x66301A510C8801E964736F6C634300080A00 CALLER CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC416464726573733A206C6F PUSH24 0x2D6C6576656C2064656C65676174652063616C6C20666169 PUSH13 0x65640000000000000000000000 ", - "sourceMap": "552:830:2:-:0;;;945:217;;;;;;;;;;;;;;;;;;:::i;:::-;1050:54;1103:1;1058:41;1050:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;1018:87:2;1011:95;;;;:::i;:::-;1116:39;1134:6;1142:5;1149;1116:17;:39::i;:::-;945:217;;552:830;;2188:295:3;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;;;;;:53;;:::i;:::-;;2365:112;2188:295;;;:::o;1902:152::-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;-1:-1:-1;;;;;2020:27:3;;;;;;;;1902:152;:::o;6575:198:12:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:12:o;1537:259:3:-;1618:37;1637:17;1618:18;;;;;:37;;:::i;:::-;1610:95;;;;-1:-1:-1;;;1610:95:3;;2025:2:16;1610:95:3;;;2007:21:16;2064:2;2044:18;;;2037:30;2103:34;2083:18;;;2076:62;-1:-1:-1;;;2154:18:16;;;2147:43;2207:19;;1610:95:3;;;;;;;;;1772:17;1715:48;-1:-1:-1;;;;;;;;;;;1742:20:3;;1715:26;;;;;:48;;:::i;:::-;:74;;-1:-1:-1;;;;;;1715:74:3;-1:-1:-1;;;;;1715:74:3;;;;;;;;;;-1:-1:-1;1537:259:3:o;6959:387:12:-;7100:12;-1:-1:-1;;;;;1470:19:12;;;7124:69;;;;-1:-1:-1;;;7124:69:12;;2439:2:16;7124:69:12;;;2421:21:16;2478:2;2458:18;;;2451:30;2517:34;2497:18;;;2490:62;-1:-1:-1;;;2568:18:16;;;2561:36;2614:19;;7124:69:12;2237:402:16;7124:69:12;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:12;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7204:67:12;;-1:-1:-1;7204:67:12;-1:-1:-1;7288:51:12;7204:67;;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:12:o;1180:320::-;-1:-1:-1;;;;;1470:19:12;;:23;;;1180:320::o;1599:147:14:-;1726:4;1599:147::o;7566:692:12:-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:12;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:12;;;;;;;;:::i;14:127:16:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:258;218:1;228:113;242:6;239:1;236:13;228:113;;;318:11;;;312:18;299:11;;;292:39;264:2;257:10;228:113;;;359:6;356:1;353:13;350:48;;;-1:-1:-1;;394:1:16;376:16;;369:27;146:258::o;409:1050::-;497:6;505;558:2;546:9;537:7;533:23;529:32;526:52;;;574:1;571;564:12;526:52;600:16;;-1:-1:-1;;;;;645:31:16;;635:42;;625:70;;691:1;688;681:12;625:70;763:2;748:18;;742:25;714:5;;-1:-1:-1;;;;;;816:14:16;;;813:34;;;843:1;840;833:12;813:34;881:6;870:9;866:22;856:32;;926:7;919:4;915:2;911:13;907:27;897:55;;948:1;945;938:12;897:55;977:2;971:9;999:2;995;992:10;989:36;;;1005:18;;:::i;:::-;1080:2;1074:9;1048:2;1134:13;;-1:-1:-1;;1130:22:16;;;1154:2;1126:31;1122:40;1110:53;;;1178:18;;;1198:22;;;1175:46;1172:72;;;1224:18;;:::i;:::-;1264:10;1260:2;1253:22;1299:2;1291:6;1284:18;1339:7;1334:2;1329;1325;1321:11;1317:20;1314:33;1311:53;;;1360:1;1357;1350:12;1311:53;1373:55;1425:2;1420;1412:6;1408:15;1403:2;1399;1395:11;1373:55;:::i;:::-;1447:6;1437:16;;;;;;;409:1050;;;;;:::o;1464:222::-;1504:4;1532:1;1529;1526:8;1523:131;;;1576:10;1571:3;1567:20;1564:1;1557:31;1611:4;1608:1;1601:15;1639:4;1636:1;1629:15;1523:131;-1:-1:-1;1671:9:16;;1464:222::o;1691:127::-;1752:10;1747:3;1743:20;1740:1;1733:31;1783:4;1780:1;1773:15;1807:4;1804:1;1797:15;2644:274;2773:3;2811:6;2805:13;2827:53;2873:6;2868:3;2861:4;2853:6;2849:17;2827:53;:::i;:::-;2896:16;;;;;2644:274;-1:-1:-1;;2644:274:16:o;2923:383::-;3072:2;3061:9;3054:21;3035:4;3104:6;3098:13;3147:6;3142:2;3131:9;3127:18;3120:34;3163:66;3222:6;3217:2;3206:9;3202:18;3197:2;3189:6;3185:15;3163:66;:::i;:::-;3290:2;3269:15;-1:-1:-1;;3265:29:16;3250:45;;;;3297:2;3246:54;;2923:383;-1:-1:-1;;2923:383:16:o;:::-;552:830:2;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_524": { - "entryPoint": null, - "id": 524, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_532": { - "entryPoint": null, - "id": 532, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_537": { - "entryPoint": null, - "id": 537, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_delegate_497": { - "entryPoint": 185, - "id": 497, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_fallback_516": { - "entryPoint": 23, - "id": 516, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getImplementation_200": { - "entryPoint": null, - "id": 200, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_implementation_167": { - "entryPoint": 116, - "id": 167, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@functionDelegateCall_1437": { - "entryPoint": 41, - "id": 1437, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_1472": { - "entryPoint": 221, - "id": 1472, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_1552": { - "entryPoint": 113, - "id": 1552, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_1227": { - "entryPoint": 85, - "id": 1227, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_1503": { - "entryPoint": 522, - "id": 1503, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 653, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 681, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 605, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1407:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "188:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "205:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "216:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "198:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "198:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "198:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "239:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "250:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "235:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "235:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "255:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "228:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "228:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "228:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "278:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "289:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "274:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "274:18:16" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "294:34:16", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "267:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "267:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "267:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "349:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "360:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "345:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "345:18:16" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "365:8:16", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "338:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "338:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "338:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "383:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "395:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "406:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "391:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "391:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "383:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "165:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "179:4:16", - "type": "" - } - ], - "src": "14:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "474:205:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "484:10:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "493:1:16", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "488:1:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "553:63:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "578:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "583:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "574:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "574:11:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "597:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "602:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "593:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "593:11:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "587:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "587:18:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "567:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "567:39:16" - }, - "nodeType": "YulExpressionStatement", - "src": "567:39:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "514:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "517:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "511:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "511:13:16" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "525:19:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "527:15:16", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "536:1:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "539:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "532:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "532:10:16" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "527:1:16" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "507:3:16", - "statements": [] - }, - "src": "503:113:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "642:31:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "655:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "660:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "651:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "651:16:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "669:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "644:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "644:27:16" - }, - "nodeType": "YulExpressionStatement", - "src": "644:27:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "631:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "634:6:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "628:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "628:13:16" - }, - "nodeType": "YulIf", - "src": "625:48:16" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "452:3:16", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "457:3:16", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "462:6:16", - "type": "" - } - ], - "src": "421:258:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "821:137:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "831:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "851:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "845:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "845:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "835:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "893:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "901:4:16", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "889:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "889:17:16" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "908:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "913:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "867:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "867:53:16" - }, - "nodeType": "YulExpressionStatement", - "src": "867:53:16" - }, - { - "nodeType": "YulAssignment", - "src": "929:23:16", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "940:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "945:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "936:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "936:16:16" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "929:3:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "797:3:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "802:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "813:3:16", - "type": "" - } - ], - "src": "684:274:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1084:321:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1101:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1112:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1094:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1094:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1094:21:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1124:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1144:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1138:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "1138:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1128:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1171:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1182:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1167:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1167:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1187:6:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1160:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1160:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1160:34:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1229:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1237:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1225:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1225:15:16" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1246:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1257:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1242:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1242:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1262:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1203:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "1203:66:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1203:66:16" - }, - { - "nodeType": "YulAssignment", - "src": "1278:121:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1294:9:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1313:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1321:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1309:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1309:15:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1326:66:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1305:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1305:88:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1290:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1290:104:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1396:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1286:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1286:113:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1278:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1053:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1064:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1075:4:16", - "type": "" - } - ], - "src": "963:442:16" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x74 JUMP JUMPDEST PUSH2 0xB9 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2FB PUSH1 0x27 SWAP2 CODECOPY PUSH2 0xDD JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB4 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xD8 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x188 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x1B0 SWAP2 SWAP1 PUSH2 0x28D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1F0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x200 DUP3 DUP3 DUP7 PUSH2 0x20A JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x219 JUMPI POP DUP2 PUSH2 0x4E JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x229 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17F SWAP2 SWAP1 PUSH2 0x2A9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x278 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x260 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x287 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x29F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x25D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2C8 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x25D JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x706673582212201E3C93 BASEFEE 0xED PUSH14 0xD2F363E89451207BD8DF182BC878 0xDC DUP1 0xD4 PUSH18 0x66301A510C8801E964736F6C634300080A00 CALLER ", - "sourceMap": "552:830:2:-:0;;;;;;2903:11:4;:9;:11::i;:::-;552:830:2;;2680:11:4;2327:110;2402:28;2412:17;:15;:17::i;:::-;2402:9;:28::i;:::-;2327:110::o;6575:198:12:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:12:o;1180:320::-;1470:19;;;:23;;;1180:320::o;1599:147:14:-;1726:4;1599:147::o;1240:140:2:-;1307:12;1338:35;1035:66:3;1385:54;;;;1306:140;1338:35:2;1331:42;;1240:140;:::o;953:895:4:-;1291:14;1288:1;1285;1272:34;1505:1;1502;1486:14;1483:1;1467:14;1460:5;1447:60;1581:16;1578:1;1575;1560:38;1619:6;1686:66;;;;1801:16;1798:1;1791:27;1686:66;1721:16;1718:1;1711:27;6959:387:12;7100:12;1470:19;;;;7124:69;;;;;;;216:2:16;7124:69:12;;;198:21:16;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:8;345:18;;;338:36;391:19;;7124:69:12;;;;;;;;;7205:12;7219:23;7246:6;:19;;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7204:67;;;;7288:51;7305:7;7314:10;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:12:o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:12;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;;;;;;;;;;:::i;421:258:16:-;493:1;503:113;517:6;514:1;511:13;503:113;;;593:11;;;587:18;574:11;;;567:39;539:2;532:10;503:113;;;634:6;631:1;628:13;625:48;;;669:1;660:6;655:3;651:16;644:27;625:48;;421:258;;;:::o;684:274::-;813:3;851:6;845:13;867:53;913:6;908:3;901:4;893:6;889:17;867:53;:::i;:::-;936:16;;;;;684:274;-1:-1:-1;;684:274:16:o;963:442::-;1112:2;1101:9;1094:21;1075:4;1144:6;1138:13;1187:6;1182:2;1171:9;1167:18;1160:34;1203:66;1262:6;1257:2;1246:9;1242:18;1237:2;1229:6;1225:15;1203:66;:::i;:::-;1321:2;1309:15;1326:66;1305:88;1290:104;;;;1396:2;1286:113;;963:442;-1:-1:-1;;963:442:16:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "171000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite" - }, - "internal": { - "_implementation()": "2144" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/ERC1967Upgrade.json b/extendedArtifacts/ERC1967Upgrade.json deleted file mode 100644 index dac56be..0000000 --- a/extendedArtifacts/ERC1967Upgrade.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "contractName": "ERC1967Upgrade", - "sourceName": "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "custom:oz-upgrades-unsafe-allow": "delegatecall", - "details": "This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._", - "events": { - "AdminChanged(address,address)": { - "details": "Emitted when the admin account has changed." - }, - "BeaconUpgraded(address)": { - "details": "Emitted when the beacon is upgraded." - }, - "Upgraded(address)": { - "details": "Emitted when the implementation is upgraded." - } - }, - "kind": "dev", - "methods": {}, - "stateVariables": { - "_ADMIN_SLOT": { - "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor." - }, - "_BEACON_SLOT": { - "details": "The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor." - }, - "_IMPLEMENTATION_SLOT": { - "details": "Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"delegatecall\",\"details\":\"This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"},\"_BEACON_SLOT\":{\"details\":\"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\"},\"_IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":\"ERC1967Upgrade\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/IBeacon.json b/extendedArtifacts/IBeacon.json deleted file mode 100644 index ce657f0..0000000 --- a/extendedArtifacts/IBeacon.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "contractName": "IBeacon", - "sourceName": "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol", - "abi": [ - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This is the interface that {BeaconProxy} expects of its beacon.", - "kind": "dev", - "methods": { - "implementation()": { - "details": "Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "implementation()": "5c60da1b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is the interface that {BeaconProxy} expects of its beacon.\",\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":\"IBeacon\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/IDiamondCut.json b/extendedArtifacts/IDiamondCut.json deleted file mode 100644 index 1d04fb1..0000000 --- a/extendedArtifacts/IDiamondCut.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "contractName": "IDiamondCut", - "sourceName": "solc_0.8/diamond/interfaces/IDiamondCut.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": { - "params": { - "_calldata": "A function call, including function selector and arguments _calldata is executed with delegatecall on _init", - "_diamondCut": "Contains the facet addresses and function selectors", - "_init": "The address of the contract or facet to execute _calldata" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": "1f931c1c" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"diamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Add/replace/remove any number of functions and optionally execute a function with delegatecall\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":\"IDiamondCut\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": { - "notice": "Add/replace/remove any number of functions and optionally execute a function with delegatecall" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9" -} \ No newline at end of file diff --git a/extendedArtifacts/IDiamondLoupe.json b/extendedArtifacts/IDiamondLoupe.json deleted file mode 100644 index cef1aa2..0000000 --- a/extendedArtifacts/IDiamondLoupe.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "contractName": "IDiamondLoupe", - "sourceName": "solc_0.8/diamond/interfaces/IDiamondLoupe.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "facetAddress(bytes4)": { - "details": "If facet is not found return address(0).", - "params": { - "_functionSelector": "The function selector." - }, - "returns": { - "facetAddress_": "The facet address." - } - }, - "facetAddresses()": { - "returns": { - "facetAddresses_": "facetAddresses_" - } - }, - "facetFunctionSelectors(address)": { - "params": { - "_facet": "The facet address." - }, - "returns": { - "facetFunctionSelectors_": "facetFunctionSelectors_" - } - }, - "facets()": { - "returns": { - "facets_": "Facet" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "facetAddress(bytes4)": "cdffacc6", - "facetAddresses()": "52ef6b2c", - "facetFunctionSelectors(address)": "adfca15e", - "facets()": "7a0ed627" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_functionSelector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facetAddress_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facetAddresses_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"facetFunctionSelectors_\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondLoupe.Facet[]\",\"name\":\"facets_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"facetAddress(bytes4)\":{\"details\":\"If facet is not found return address(0).\",\"params\":{\"_functionSelector\":\"The function selector.\"},\"returns\":{\"facetAddress_\":\"The facet address.\"}},\"facetAddresses()\":{\"returns\":{\"facetAddresses_\":\"facetAddresses_\"}},\"facetFunctionSelectors(address)\":{\"params\":{\"_facet\":\"The facet address.\"},\"returns\":{\"facetFunctionSelectors_\":\"facetFunctionSelectors_\"}},\"facets()\":{\"returns\":{\"facets_\":\"Facet\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"facetAddress(bytes4)\":{\"notice\":\"Gets the facet that supports the given selector.\"},\"facetAddresses()\":{\"notice\":\"Get all the facet addresses used by a diamond.\"},\"facetFunctionSelectors(address)\":{\"notice\":\"Gets all the function selectors supported by a specific facet.\"},\"facets()\":{\"notice\":\"Gets all facet addresses and their four byte function selectors.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\":\"IDiamondLoupe\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0x10884024af2c0f7deca0fac4ddf84e76da5dba35b6e02fabeac8ea54c1a5c6f7\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "facetAddress(bytes4)": { - "notice": "Gets the facet that supports the given selector." - }, - "facetAddresses()": { - "notice": "Get all the facet addresses used by a diamond." - }, - "facetFunctionSelectors(address)": { - "notice": "Gets all the function selectors supported by a specific facet." - }, - "facets()": { - "notice": "Gets all facet addresses and their four byte function selectors." - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9" -} \ No newline at end of file diff --git a/extendedArtifacts/IERC165.json b/extendedArtifacts/IERC165.json deleted file mode 100644 index 16c2584..0000000 --- a/extendedArtifacts/IERC165.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "contractName": "IERC165", - "sourceName": "solc_0.8/openzeppelin/utils/introspection/IERC165.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.", - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "supportsInterface(bytes4)": "01ffc9a7" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "79de338ba05d5edc12f53c878431817f" -} \ No newline at end of file diff --git a/extendedArtifacts/IERC173.json b/extendedArtifacts/IERC173.json deleted file mode 100644 index 8dbb355..0000000 --- a/extendedArtifacts/IERC173.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "contractName": "IERC173", - "sourceName": "solc_0.8/diamond/interfaces/IERC173.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "owner_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "events": { - "OwnershipTransferred(address,address)": { - "details": "This emits when ownership of a contract changes." - } - }, - "kind": "dev", - "methods": { - "owner()": { - "returns": { - "owner_": "The address of the owner." - } - }, - "transferOwnership(address)": { - "details": "Set _newOwner to address(0) to renounce any ownership.", - "params": { - "_newOwner": "The address of the new owner of the contract" - } - } - }, - "title": "ERC-173 Contract Ownership Standard Note: the ERC-165 identifier for this interface is 0x7f5828d0", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"OwnershipTransferred(address,address)\":{\"details\":\"This emits when ownership of a contract changes.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"returns\":{\"owner_\":\"The address of the owner.\"}},\"transferOwnership(address)\":{\"details\":\"Set _newOwner to address(0) to renounce any ownership.\",\"params\":{\"_newOwner\":\"The address of the new owner of the contract\"}}},\"title\":\"ERC-173 Contract Ownership Standard Note: the ERC-165 identifier for this interface is 0x7f5828d0\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"owner()\":{\"notice\":\"Get the address of the owner\"},\"transferOwnership(address)\":{\"notice\":\"Set the address of the new owner of the contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/interfaces/IERC173.sol\":\"IERC173\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/interfaces/IERC173.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\",\"keccak256\":\"0x001e07b0fbc894300b939d496ffb005abe398b5bc609802d319b8cdeafe5d36b\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "owner()": { - "notice": "Get the address of the owner" - }, - "transferOwnership(address)": { - "notice": "Set the address of the new owner of the contract" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9" -} \ No newline at end of file diff --git a/extendedArtifacts/IERC1822Proxiable.json b/extendedArtifacts/IERC1822Proxiable.json deleted file mode 100644 index f138f1b..0000000 --- a/extendedArtifacts/IERC1822Proxiable.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "contractName": "IERC1822Proxiable", - "sourceName": "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol", - "abi": [ - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.", - "kind": "dev", - "methods": { - "proxiableUUID()": { - "details": "Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "proxiableUUID()": "52d1902d" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.\",\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":\"IERC1822Proxiable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/Initializable.json b/extendedArtifacts/Initializable.json deleted file mode 100644 index 7526629..0000000 --- a/extendedArtifacts/Initializable.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "contractName": "Initializable", - "sourceName": "solc_0.8/openzeppelin/proxy/utils/Initializable.sol", - "abi": [], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "custom:oz-upgrades-unsafe-allow": "constructor constructor() initializer {} ``` ====", - "details": "This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: [.hljs-theme-light.nopadding] ```", - "kind": "dev", - "methods": {}, - "stateVariables": { - "_initialized": { - "details": "Indicates that the contract has been initialized." - }, - "_initializing": { - "details": "Indicates that the contract is in the process of being initialized." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() initializer {} ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: [.hljs-theme-light.nopadding] ```\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_initialized\":{\"details\":\"Indicates that the contract has been initialized.\"},\"_initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xe8196973e4cee18eb42b021dd702c7d41a024cb690f1897d27d80d983a1edafa\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 1026, - "contract": "solc_0.8/openzeppelin/proxy/utils/Initializable.sol:Initializable", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 1029, - "contract": "solc_0.8/openzeppelin/proxy/utils/Initializable.sol:Initializable", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - } - ], - "types": { - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/LibDiamond.json b/extendedArtifacts/LibDiamond.json deleted file mode 100644 index 7d0f92b..0000000 --- a/extendedArtifacts/LibDiamond.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "contractName": "LibDiamond", - "sourceName": "solc_0.8/diamond/libraries/LibDiamond.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - } - ], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122011bbb63d5c2b4a5096da6b88339531d47645ba85e19ad62b334df9e78e45b3f764736f6c634300080a0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122011bbb63d5c2b4a5096da6b88339531d47645ba85e19ad62b334df9e78e45b3f764736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GT 0xBB 0xB6 RETURNDATASIZE 0x5C 0x2B 0x4A POP SWAP7 0xDA PUSH12 0x88339531D47645BA85E19AD6 0x2B CALLER 0x4D 0xF9 0xE7 DUP15 GASLIMIT 0xB3 0xF7 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "423:10258:11:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;423:10258:11;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GT 0xBB 0xB6 RETURNDATASIZE 0x5C 0x2B 0x4A POP SWAP7 0xDA PUSH12 0x88339531D47645BA85E19AD6 0x2B CALLER 0x4D 0xF9 0xE7 DUP15 GASLIMIT 0xB3 0xF7 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "423:10258:11:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "addFacet(struct LibDiamond.DiamondStorage storage pointer,address)": "infinite", - "addFunction(struct LibDiamond.DiamondStorage storage pointer,bytes4,uint96,address)": "infinite", - "addFunctions(address,bytes4[] memory)": "infinite", - "contractOwner()": "infinite", - "diamondCut(struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)": "infinite", - "diamondStorage()": "infinite", - "enforceHasContractCode(address,string memory)": "infinite", - "enforceIsContractOwner()": "infinite", - "initializeDiamondCut(address,bytes memory)": "infinite", - "removeFunction(struct LibDiamond.DiamondStorage storage pointer,address,bytes4)": "infinite", - "removeFunctions(address,bytes4[] memory)": "infinite", - "replaceFunctions(address,bytes4[] memory)": "infinite", - "setContractOwner(address)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/libraries/LibDiamond.sol\":\"LibDiamond\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9" -} \ No newline at end of file diff --git a/extendedArtifacts/OptimizedTransparentUpgradeableProxy.json b/extendedArtifacts/OptimizedTransparentUpgradeableProxy.json deleted file mode 100644 index 10e3ac1..0000000 --- a/extendedArtifacts/OptimizedTransparentUpgradeableProxy.json +++ /dev/null @@ -1,6037 +0,0 @@ -{ - "contractName": "OptimizedTransparentUpgradeableProxy", - "sourceName": "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60a060405260405162000f5f38038062000f5f83398101604081905262000026916200044a565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd6200052a565b60008051602062000f188339815191521462000075576200007562000550565b62000083828260006200013c565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61046200052a565b60008051602062000ef883398151915214620000d357620000d362000550565b6001600160a01b038216608081905260008051602062000ef88339815191528381556040805160008152602081019390935290917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a150505050620005b9565b620001478362000179565b600082511180620001555750805b156200017457620001728383620001bb60201b620002a91760201c565b505b505050565b6200018481620001ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e3838360405180606001604052806027815260200162000f3860279139620002b2565b9392505050565b62000200816200039860201b620002d51760201c565b620002685760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806200029160008051602062000f1883398151915260001b620003a760201b620002411760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606001600160a01b0384163b6200031c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200025f565b600080856001600160a01b03168560405162000339919062000566565b600060405180830381855af49150503d806000811462000376576040519150601f19603f3d011682016040523d82523d6000602084013e6200037b565b606091505b5090925090506200038e828286620003aa565b9695505050505050565b6001600160a01b03163b151590565b90565b60608315620003bb575081620001e3565b825115620003cc5782518084602001fd5b8160405162461bcd60e51b81526004016200025f919062000584565b80516001600160a01b03811681146200040057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004385781810151838201526020016200041e565b83811115620001725750506000910152565b6000806000606084860312156200046057600080fd5b6200046b84620003e8565b92506200047b60208501620003e8565b60408501519092506001600160401b03808211156200049957600080fd5b818601915086601f830112620004ae57600080fd5b815181811115620004c357620004c362000405565b604051601f8201601f19908116603f01168101908382118183101715620004ee57620004ee62000405565b816040528281528960208487010111156200050857600080fd5b6200051b8360208301602088016200041b565b80955050505050509250925092565b6000828210156200054b57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b600082516200057a8184602087016200041b565b9190910192915050565b6020815260008251806020840152620005a58160408501602087016200041b565b601f01601f19169190910160400192915050565b608051610900620005f86000396000818161011201528181610176015281816102060152818161025e01528181610287015261030901526109006000f3fe6080604052600436106100435760003560e01c80633659cfe61461005a5780634f1ef2861461007a5780635c60da1b1461008d578063f851a440146100cb57610052565b36610052576100506100e0565b005b6100506100e0565b34801561006657600080fd5b5061005061007536600461076c565b6100fa565b610050610088366004610787565b61015e565b34801561009957600080fd5b506100a26101ec565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d757600080fd5b506100a2610244565b6100e86102f1565b6100f86100f36103e2565b610422565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101565761015381604051806020016040528060008152506000610446565b50565b6101536100e0565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101e4576101df8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610446915050565b505050565b6101df6100e0565b60003373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610239576102346103e2565b905090565b6102416100e0565b90565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561023957507f000000000000000000000000000000000000000000000000000000000000000090565b60606102ce83836040518060600160405280602781526020016108a460279139610471565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156100f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006102347f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b3660008037600080366000845af43d6000803e808015610441573d6000f35b3d6000fd5b61044f83610599565b60008251118061045c5750805b156101df5761046b83836102a9565b50505050565b606073ffffffffffffffffffffffffffffffffffffffff84163b610517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016103d9565b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161053f9190610836565b600060405180830381855af49150503d806000811461057a576040519150601f19603f3d011682016040523d82523d6000602084013e61057f565b606091505b509150915061058f8282866105e6565b9695505050505050565b6105a281610639565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606083156105f55750816102ce565b8251156106055782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d99190610852565b73ffffffffffffffffffffffffffffffffffffffff81163b6106dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016103d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b803573ffffffffffffffffffffffffffffffffffffffff8116811461076757600080fd5b919050565b60006020828403121561077e57600080fd5b6102ce82610743565b60008060006040848603121561079c57600080fd5b6107a584610743565b9250602084013567ffffffffffffffff808211156107c257600080fd5b818601915086601f8301126107d657600080fd5b8135818111156107e557600080fd5b8760208285010111156107f757600080fd5b6020830194508093505050509250925092565b60005b8381101561082557818101518382015260200161080d565b8381111561046b5750506000910152565b6000825161084881846020870161080a565b9190910192915050565b602081526000825180602084015261087181604085016020870161080a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206f70214c51cdd41c05ba0ffeb72b309ca3c8be178fd6e73c12162330799984f364736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", - "deployedBytecode": "0x6080604052600436106100435760003560e01c80633659cfe61461005a5780634f1ef2861461007a5780635c60da1b1461008d578063f851a440146100cb57610052565b36610052576100506100e0565b005b6100506100e0565b34801561006657600080fd5b5061005061007536600461076c565b6100fa565b610050610088366004610787565b61015e565b34801561009957600080fd5b506100a26101ec565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d757600080fd5b506100a2610244565b6100e86102f1565b6100f86100f36103e2565b610422565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101565761015381604051806020016040528060008152506000610446565b50565b6101536100e0565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101e4576101df8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610446915050565b505050565b6101df6100e0565b60003373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610239576102346103e2565b905090565b6102416100e0565b90565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561023957507f000000000000000000000000000000000000000000000000000000000000000090565b60606102ce83836040518060600160405280602781526020016108a460279139610471565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156100f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006102347f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b3660008037600080366000845af43d6000803e808015610441573d6000f35b3d6000fd5b61044f83610599565b60008251118061045c5750805b156101df5761046b83836102a9565b50505050565b606073ffffffffffffffffffffffffffffffffffffffff84163b610517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016103d9565b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161053f9190610836565b600060405180830381855af49150503d806000811461057a576040519150601f19603f3d011682016040523d82523d6000602084013e61057f565b606091505b509150915061058f8282866105e6565b9695505050505050565b6105a281610639565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606083156105f55750816102ce565b8251156106055782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d99190610852565b73ffffffffffffffffffffffffffffffffffffffff81163b6106dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016103d9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b803573ffffffffffffffffffffffffffffffffffffffff8116811461076757600080fd5b919050565b60006020828403121561077e57600080fd5b6102ce82610743565b60008060006040848603121561079c57600080fd5b6107a584610743565b9250602084013567ffffffffffffffff808211156107c257600080fd5b818601915086601f8301126107d657600080fd5b8135818111156107e557600080fd5b8760208285010111156107f757600080fd5b6020830194508093505050509250925092565b60005b8381101561082557818101518382015260200161080d565b8381111561046b5750506000910152565b6000825161084881846020870161080a565b9190910192915050565b602081526000825180602084015261087181604085016020870161080a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206f70214c51cdd41c05ba0ffeb72b309ca3c8be178fd6e73c12162330799984f364736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", - "kind": "dev", - "methods": { - "admin()": { - "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" - }, - "constructor": { - "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." - }, - "implementation()": { - "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_155": { - "entryPoint": null, - "id": 155, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_1642": { - "entryPoint": null, - "id": 1642, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_setImplementation_224": { - "entryPoint": 490, - "id": 224, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeToAndCall_269": { - "entryPoint": 316, - "id": 269, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_upgradeTo_239": { - "entryPoint": 377, - "id": 239, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@functionDelegateCall_1437": { - "entryPoint": 443, - "id": 1437, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_1472": { - "entryPoint": 690, - "id": 1472, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_1552": { - "entryPoint": 935, - "id": 1552, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_1227": { - "entryPoint": 920, - "id": 1227, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_1503": { - "entryPoint": 938, - "id": 1503, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 1000, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 1098, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 1382, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 1412, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 1322, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 1051, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x01": { - "entryPoint": 1360, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1029, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3802:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:117:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "84:22:16", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "99:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "93:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "93:13:16" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "84:5:16" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "169:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "178:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "181:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "171:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "171:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "171:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "128:5:16" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "139:5:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "154:3:16", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "150:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "150:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "163:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "146:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "146:19:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "135:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "135:31:16" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "125:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "125:42:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "118:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "118:50:16" - }, - "nodeType": "YulIf", - "src": "115:70:16" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:16", - "type": "" - } - ], - "src": "14:177:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "228:95:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "245:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "257:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "248:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "248:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "238:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "238:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "238:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "285:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "288:4:16", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "278:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "278:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "278:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "302:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "302:15:16" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "196:127:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "381:205:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "391:10:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "400:1:16", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "395:1:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "460:63:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "485:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "490:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "481:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "481:11:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "504:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "509:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "500:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "500:11:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "494:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "494:18:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "474:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "474:39:16" - }, - "nodeType": "YulExpressionStatement", - "src": "474:39:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "421:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "424:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "418:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "418:13:16" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "432:19:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "434:15:16", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "443:1:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "446:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "439:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "439:10:16" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "434:1:16" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "414:3:16", - "statements": [] - }, - "src": "410:113:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "549:31:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "562:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "567:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "558:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "558:16:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "576:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "551:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "551:27:16" - }, - "nodeType": "YulExpressionStatement", - "src": "551:27:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "538:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "541:6:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "535:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "535:13:16" - }, - "nodeType": "YulIf", - "src": "532:48:16" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "359:3:16", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "364:3:16", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "369:6:16", - "type": "" - } - ], - "src": "328:258:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "715:929:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "761:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "770:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "773:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "763:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "763:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "763:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "736:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "745:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "732:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "732:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "757:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "728:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "728:32:16" - }, - "nodeType": "YulIf", - "src": "725:52:16" - }, - { - "nodeType": "YulAssignment", - "src": "786:50:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "826:9:16" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "796:29:16" - }, - "nodeType": "YulFunctionCall", - "src": "796:40:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "786:6:16" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "845:59:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "889:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "900:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "885:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "885:18:16" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "855:29:16" - }, - "nodeType": "YulFunctionCall", - "src": "855:49:16" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "845:6:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "913:39:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "937:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "948:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "933:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "933:18:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "927:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "927:25:16" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "917:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "961:28:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "979:2:16", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "983:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "975:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "975:10:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "987:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "971:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "971:18:16" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "965:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1016:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1025:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1028:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1018:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1018:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1018:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1004:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1012:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1001:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1001:14:16" - }, - "nodeType": "YulIf", - "src": "998:34:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1041:32:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1055:9:16" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1066:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1051:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1051:22:16" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1045:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1121:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1130:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1133:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1123:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1123:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1123:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1100:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1104:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1096:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1096:13:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1111:7:16" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1092:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1092:27:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1085:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1085:35:16" - }, - "nodeType": "YulIf", - "src": "1082:55:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1146:19:16", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1162:2:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1156:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "1156:9:16" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1150:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1188:22:16", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1190:16:16" - }, - "nodeType": "YulFunctionCall", - "src": "1190:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1190:18:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1180:2:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1184:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1177:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1177:10:16" - }, - "nodeType": "YulIf", - "src": "1174:36:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1219:17:16", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1233:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1229:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1229:7:16" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1223:2:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1245:23:16", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1265:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1259:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "1259:9:16" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1249:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1277:71:16", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1299:6:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1323:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1327:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1319:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1319:13:16" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1334:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1315:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1315:22:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1339:2:16", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1311:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1311:31:16" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1344:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1307:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1307:40:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1295:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1295:53:16" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1281:10:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1407:22:16", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1409:16:16" - }, - "nodeType": "YulFunctionCall", - "src": "1409:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1409:18:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1366:10:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1378:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1363:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1363:18:16" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1386:10:16" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1398:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1383:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1383:22:16" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1360:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1360:46:16" - }, - "nodeType": "YulIf", - "src": "1357:72:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1445:2:16", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1449:10:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1438:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1438:22:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1438:22:16" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1476:6:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1484:2:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1469:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1469:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1469:18:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1533:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1542:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1545:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1535:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1535:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1535:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1510:2:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1514:2:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1506:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1506:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1519:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1502:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1502:20:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1524:7:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1499:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1499:33:16" - }, - "nodeType": "YulIf", - "src": "1496:53:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1584:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1588:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1580:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1580:11:16" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1597:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1605:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1593:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1593:15:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1610:2:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1558:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "1558:55:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1558:55:16" - }, - { - "nodeType": "YulAssignment", - "src": "1622:16:16", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1632:6:16" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1622:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "665:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "676:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "688:6:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "696:6:16", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "704:6:16", - "type": "" - } - ], - "src": "591:1053:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1698:173:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1728:111:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1749:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1756:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1761:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1752:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1752:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1742:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1742:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1742:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1793:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1796:4:16", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1786:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1786:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1786:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1821:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1824:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1814:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1814:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1814:15:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1714:1:16" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1717:1:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1711:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1711:8:16" - }, - "nodeType": "YulIf", - "src": "1708:131:16" - }, - { - "nodeType": "YulAssignment", - "src": "1848:17:16", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1860:1:16" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1863:1:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1856:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1856:9:16" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "1848:4:16" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "1680:1:16", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "1683:1:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "1689:4:16", - "type": "" - } - ], - "src": "1649:222:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1908:95:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1925:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1932:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1937:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1928:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1928:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1918:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1918:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1918:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1965:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1968:4:16", - "type": "", - "value": "0x01" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1958:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1958:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1958:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1989:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1992:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1982:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1982:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1982:15:16" - } - ] - }, - "name": "panic_error_0x01", - "nodeType": "YulFunctionDefinition", - "src": "1876:127:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2137:175:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2147:26:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2159:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2170:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2155:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2155:18:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2147:4:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2182:29:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2200:3:16", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2205:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2196:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2196:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2209:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2192:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2192:19:16" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2186:2:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2227:9:16" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2242:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2250:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2238:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2238:15:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2220:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2220:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2220:34:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2274:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2285:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2270:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2270:18:16" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2294:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2302:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2290:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2290:15:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2263:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2263:43:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2263:43:16" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2098:9:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2109:6:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2117:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2128:4:16", - "type": "" - } - ], - "src": "2008:304:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2491:235:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2508:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2519:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2501:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2501:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2501:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2542:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2553:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2538:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2538:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2558:2:16", - "type": "", - "value": "45" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2531:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2531:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2531:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2581:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2592:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2577:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2577:18:16" - }, - { - "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2597:34:16", - "type": "", - "value": "ERC1967: new implementation is n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2570:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2570:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2570:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2652:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2663:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2648:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2648:18:16" - }, - { - "hexValue": "6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2668:15:16", - "type": "", - "value": "ot a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2641:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2641:43:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2641:43:16" - }, - { - "nodeType": "YulAssignment", - "src": "2693:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2705:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2716:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2701:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2701:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2693:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2468:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2482:4:16", - "type": "" - } - ], - "src": "2317:409:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2905:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2922:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2933:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2915:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2915:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2915:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2956:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2967:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2952:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2952:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2972:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2945:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2945:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2945:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2995:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3006:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2991:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2991:18:16" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3011:34:16", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2984:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2984:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2984:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3066:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3077:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3062:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3062:18:16" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3082:8:16", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3055:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3055:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3055:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "3100:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3112:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3123:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3108:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3108:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3100:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2882:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2896:4:16", - "type": "" - } - ], - "src": "2731:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3275:137:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3285:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3305:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3299:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "3299:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3289:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3347:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3355:4:16", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3343:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3343:17:16" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3362:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3367:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3321:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "3321:53:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3321:53:16" - }, - { - "nodeType": "YulAssignment", - "src": "3383:23:16", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3394:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3399:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3390:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3390:16:16" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3383:3:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3251:3:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3256:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3267:3:16", - "type": "" - } - ], - "src": "3138:274:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3538:262:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3555:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3566:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3548:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3548:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3548:21:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3578:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3598:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3592:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "3592:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3582:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3625:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3636:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3621:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3621:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3641:6:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3614:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3614:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3614:34:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3683:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3691:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3679:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3679:15:16" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3700:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3711:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3696:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3696:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3716:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3657:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "3657:66:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3657:66:16" - }, - { - "nodeType": "YulAssignment", - "src": "3732:62:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3748:9:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3767:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3775:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3763:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3763:15:16" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3784:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "3780:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3780:7:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3759:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3759:29:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3744:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3744:45:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3791:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3740:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3740:54:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3732:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3507:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3518:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3529:4:16", - "type": "" - } - ], - "src": "3417:383:16" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n let offset := mload(add(headStart, 64))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value2 := memPtr\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n diff := sub(x, y)\n }\n function panic_error_0x01()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x01)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 45)\n mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n mstore(add(headStart, 96), \"ot a contract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xF5F CODESIZE SUB DUP1 PUSH3 0xF5F DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x44A JUMP JUMPDEST DUP3 DUP2 PUSH3 0x55 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH3 0x52A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xF18 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0x75 JUMPI PUSH3 0x75 PUSH3 0x550 JUMP JUMPDEST PUSH3 0x83 DUP3 DUP3 PUSH1 0x0 PUSH3 0x13C JUMP JUMPDEST POP PUSH3 0xB3 SWAP1 POP PUSH1 0x1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6104 PUSH3 0x52A JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xEF8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0xD3 JUMPI PUSH3 0xD3 PUSH3 0x550 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xEF8 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 SWAP2 PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP PUSH3 0x5B9 JUMP JUMPDEST PUSH3 0x147 DUP4 PUSH3 0x179 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH3 0x155 JUMPI POP DUP1 JUMPDEST ISZERO PUSH3 0x174 JUMPI PUSH3 0x172 DUP4 DUP4 PUSH3 0x1BB PUSH1 0x20 SHL PUSH3 0x2A9 OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH3 0x184 DUP2 PUSH3 0x1EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH3 0x1E3 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0xF38 PUSH1 0x27 SWAP2 CODECOPY PUSH3 0x2B2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH3 0x200 DUP2 PUSH3 0x398 PUSH1 0x20 SHL PUSH3 0x2D5 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x268 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH3 0x291 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xF18 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x3A7 PUSH1 0x20 SHL PUSH3 0x241 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH3 0x31C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x25F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH3 0x339 SWAP2 SWAP1 PUSH3 0x566 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x376 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x37B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH3 0x38E DUP3 DUP3 DUP7 PUSH3 0x3AA JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH3 0x3BB JUMPI POP DUP2 PUSH3 0x1E3 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH3 0x3CC JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x25F SWAP2 SWAP1 PUSH3 0x584 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x438 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x41E JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x172 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x46B DUP5 PUSH3 0x3E8 JUMP JUMPDEST SWAP3 POP PUSH3 0x47B PUSH1 0x20 DUP6 ADD PUSH3 0x3E8 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x4C3 JUMPI PUSH3 0x4C3 PUSH3 0x405 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x4EE JUMPI PUSH3 0x4EE PUSH3 0x405 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x51B DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x41B JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH3 0x54B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x57A DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x41B JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH3 0x5A5 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH3 0x41B JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x900 PUSH3 0x5F8 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x112 ADD MSTORE DUP2 DUP2 PUSH2 0x176 ADD MSTORE DUP2 DUP2 PUSH2 0x206 ADD MSTORE DUP2 DUP2 PUSH2 0x25E ADD MSTORE DUP2 DUP2 PUSH2 0x287 ADD MSTORE PUSH2 0x309 ADD MSTORE PUSH2 0x900 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x43 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5A JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xCB JUMPI PUSH2 0x52 JUMP JUMPDEST CALLDATASIZE PUSH2 0x52 JUMPI PUSH2 0x50 PUSH2 0xE0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x50 PUSH2 0xE0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x50 PUSH2 0x75 CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH2 0xFA JUMP JUMPDEST PUSH2 0x50 PUSH2 0x88 CALLDATASIZE PUSH1 0x4 PUSH2 0x787 JUMP JUMPDEST PUSH2 0x15E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA2 PUSH2 0x1EC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA2 PUSH2 0x244 JUMP JUMPDEST PUSH2 0xE8 PUSH2 0x2F1 JUMP JUMPDEST PUSH2 0xF8 PUSH2 0xF3 PUSH2 0x3E2 JUMP JUMPDEST PUSH2 0x422 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x156 JUMPI PUSH2 0x153 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x446 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x153 PUSH2 0xE0 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x1E4 JUMPI PUSH2 0x1DF DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x446 SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1DF PUSH2 0xE0 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x239 JUMPI PUSH2 0x234 PUSH2 0x3E2 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x241 PUSH2 0xE0 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x239 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2CE DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A4 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x471 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0xF8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x42 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x6574000000000000000000000000000000000000000000000000000000000000 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x234 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x441 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x44F DUP4 PUSH2 0x599 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x45C JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x1DF JUMPI PUSH2 0x46B DUP4 DUP4 PUSH2 0x2A9 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x517 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3D9 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x53F SWAP2 SWAP1 PUSH2 0x836 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x57A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x57F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x58F DUP3 DUP3 DUP7 PUSH2 0x5E6 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5A2 DUP2 PUSH2 0x639 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x5F5 JUMPI POP DUP2 PUSH2 0x2CE JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x605 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D9 SWAP2 SWAP1 PUSH2 0x852 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x6DD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74206120636F6E747261637400000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3D9 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x767 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2CE DUP3 PUSH2 0x743 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7A5 DUP5 PUSH2 0x743 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x7F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x825 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x80D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x46B JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x848 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x80A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x871 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x80A JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x706673582212206F7021 0x4C MLOAD 0xCD 0xD4 SHR SDIV 0xBA 0xF INVALID 0xB7 0x2B ADDRESS SWAP13 LOG3 0xC8 0xBE OR DUP16 0xD6 0xE7 EXTCODECOPY SLT AND 0x23 ADDRESS PUSH26 0x9984F364736F6C634300080A0033B53127684A568B3173AE13B9 0xF8 0xA6 ADD PUSH15 0x243E63B6E8EE1178D6A717850B5D61 SUB CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC416464726573733A206C6F PUSH24 0x2D6C6576656C2064656C65676174652063616C6C20666169 PUSH13 0x65640000000000000000000000 ", - "sourceMap": "1653:3648:15:-:0;;;1976:499;;;;;;;;;;;;;;;;;;:::i;:::-;2091:6;2099:5;1050:54:2;1103:1;1058:41;1050:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;1018:87:2;1011:95;;;;:::i;:::-;1116:39;1134:6;1142:5;1149;1116:17;:39::i;:::-;-1:-1:-1;2146:45:15::1;::::0;-1:-1:-1;2190:1:15::1;2154:32;2146:45;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;2123:69:15::1;2116:77;;;;:::i;:::-;-1:-1:-1::0;;;;;2203:15:15;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;2392:20:15;;;2436:32:::1;::::0;;2277:12:::1;2220:34:16::0;;2285:2;2270:18;;2263:43;;;;3847:66:3;;2436:32:15::1;::::0;2155:18:16;2436:32:15::1;;;;;;;2106:369;1976:499:::0;;;1653:3648;;2188:295:3;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;;;;;:53;;:::i;:::-;;2365:112;2188:295;;;:::o;1902:152::-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;-1:-1:-1;;;;;2020:27:3;;;;;;;;1902:152;:::o;6575:198:12:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:12:o;1537:259:3:-;1618:37;1637:17;1618:18;;;;;:37;;:::i;:::-;1610:95;;;;-1:-1:-1;;;1610:95:3;;2519:2:16;1610:95:3;;;2501:21:16;2558:2;2538:18;;;2531:30;2597:34;2577:18;;;2570:62;-1:-1:-1;;;2648:18:16;;;2641:43;2701:19;;1610:95:3;;;;;;;;;1772:17;1715:48;-1:-1:-1;;;;;;;;;;;1742:20:3;;1715:26;;;;;:48;;:::i;:::-;:74;;-1:-1:-1;;;;;;1715:74:3;-1:-1:-1;;;;;1715:74:3;;;;;;;;;;-1:-1:-1;1537:259:3:o;6959:387:12:-;7100:12;-1:-1:-1;;;;;1470:19:12;;;7124:69;;;;-1:-1:-1;;;7124:69:12;;2933:2:16;7124:69:12;;;2915:21:16;2972:2;2952:18;;;2945:30;3011:34;2991:18;;;2984:62;-1:-1:-1;;;3062:18:16;;;3055:36;3108:19;;7124:69:12;2731:402:16;7124:69:12;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:12;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7204:67:12;;-1:-1:-1;7204:67:12;-1:-1:-1;7288:51:12;7204:67;;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:12:o;1180:320::-;-1:-1:-1;;;;;1470:19:12;;:23;;;1180:320::o;1599:147:14:-;1726:4;1599:147::o;7566:692:12:-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:12;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:12;;;;;;;;:::i;14:177:16:-;93:13;;-1:-1:-1;;;;;135:31:16;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:258;400:1;410:113;424:6;421:1;418:13;410:113;;;500:11;;;494:18;481:11;;;474:39;446:2;439:10;410:113;;;541:6;538:1;535:13;532:48;;;-1:-1:-1;;576:1:16;558:16;;551:27;328:258::o;591:1053::-;688:6;696;704;757:2;745:9;736:7;732:23;728:32;725:52;;;773:1;770;763:12;725:52;796:40;826:9;796:40;:::i;:::-;786:50;;855:49;900:2;889:9;885:18;855:49;:::i;:::-;948:2;933:18;;927:25;845:59;;-1:-1:-1;;;;;;1001:14:16;;;998:34;;;1028:1;1025;1018:12;998:34;1066:6;1055:9;1051:22;1041:32;;1111:7;1104:4;1100:2;1096:13;1092:27;1082:55;;1133:1;1130;1123:12;1082:55;1162:2;1156:9;1184:2;1180;1177:10;1174:36;;;1190:18;;:::i;:::-;1265:2;1259:9;1233:2;1319:13;;-1:-1:-1;;1315:22:16;;;1339:2;1311:31;1307:40;1295:53;;;1363:18;;;1383:22;;;1360:46;1357:72;;;1409:18;;:::i;:::-;1449:10;1445:2;1438:22;1484:2;1476:6;1469:18;1524:7;1519:2;1514;1510;1506:11;1502:20;1499:33;1496:53;;;1545:1;1542;1535:12;1496:53;1558:55;1610:2;1605;1597:6;1593:15;1588:2;1584;1580:11;1558:55;:::i;:::-;1632:6;1622:16;;;;;;;591:1053;;;;;:::o;1649:222::-;1689:4;1717:1;1714;1711:8;1708:131;;;1761:10;1756:3;1752:20;1749:1;1742:31;1796:4;1793:1;1786:15;1824:4;1821:1;1814:15;1708:131;-1:-1:-1;1856:9:16;;1649:222::o;1876:127::-;1937:10;1932:3;1928:20;1925:1;1918:31;1968:4;1965:1;1958:15;1992:4;1989:1;1982:15;3138:274;3267:3;3305:6;3299:13;3321:53;3367:6;3362:3;3355:4;3347:6;3343:17;3321:53;:::i;:::-;3390:16;;;;;3138:274;-1:-1:-1;;3138:274:16:o;3417:383::-;3566:2;3555:9;3548:21;3529:4;3598:6;3592:13;3641:6;3636:2;3625:9;3621:18;3614:34;3657:66;3716:6;3711:2;3700:9;3696:18;3691:2;3683:6;3679:15;3657:66;:::i;:::-;3784:2;3763:15;-1:-1:-1;;3759:29:16;3744:45;;;;3791:2;3740:54;;3417:383;-1:-1:-1;;3417:383:16:o;:::-;1653:3648:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_524": { - "entryPoint": null, - "id": 524, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_532": { - "entryPoint": null, - "id": 532, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_1751": { - "entryPoint": 753, - "id": 1751, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_537": { - "entryPoint": null, - "id": 537, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_delegate_497": { - "entryPoint": 1058, - "id": 497, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_fallback_516": { - "entryPoint": 224, - "id": 516, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getAdmin_1760": { - "entryPoint": null, - "id": 1760, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_getImplementation_200": { - "entryPoint": null, - "id": 200, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_implementation_167": { - "entryPoint": 994, - "id": 167, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_224": { - "entryPoint": 1593, - "id": 224, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeToAndCall_269": { - "entryPoint": 1094, - "id": 269, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_upgradeTo_239": { - "entryPoint": 1433, - "id": 239, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@admin_1672": { - "entryPoint": 580, - "id": 1672, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@functionDelegateCall_1437": { - "entryPoint": 681, - "id": 1437, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_1472": { - "entryPoint": 1137, - "id": 1472, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_1552": { - "entryPoint": null, - "id": 1552, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@implementation_1686": { - "entryPoint": 492, - "id": 1686, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@isContract_1227": { - "entryPoint": 725, - "id": 1227, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@upgradeToAndCall_1721": { - "entryPoint": 350, - "id": 1721, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@upgradeTo_1704": { - "entryPoint": 250, - "id": 1704, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@verifyCallResult_1503": { - "entryPoint": 1510, - "id": 1503, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_address": { - "entryPoint": 1859, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 1900, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_calldata_ptr": { - "entryPoint": 1927, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 2102, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 2130, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 2058, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3589:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "63:147:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "73:29:16", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "95:6:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "82:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "82:20:16" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "73:5:16" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "188:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "197:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "200:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "190:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "190:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "190:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "124:5:16" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "135:5:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "142:42:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "131:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "131:54:16" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "121:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "121:65:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "114:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "114:73:16" - }, - "nodeType": "YulIf", - "src": "111:93:16" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "42:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:16", - "type": "" - } - ], - "src": "14:196:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "285:116:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "331:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "340:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "333:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "333:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "333:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "306:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "315:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "302:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "302:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "327:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "298:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "298:32:16" - }, - "nodeType": "YulIf", - "src": "295:52:16" - }, - { - "nodeType": "YulAssignment", - "src": "356:39:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "385:9:16" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "366:18:16" - }, - "nodeType": "YulFunctionCall", - "src": "366:29:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "356:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "251:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "262:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "274:6:16", - "type": "" - } - ], - "src": "215:186:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "512:559:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "558:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "567:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "570:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "560:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "560:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "560:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "533:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "542:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "529:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "529:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "554:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "525:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "525:32:16" - }, - "nodeType": "YulIf", - "src": "522:52:16" - }, - { - "nodeType": "YulAssignment", - "src": "583:39:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "612:9:16" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "593:18:16" - }, - "nodeType": "YulFunctionCall", - "src": "593:29:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "583:6:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "631:46:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "662:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "673:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "658:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "658:18:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "645:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "645:32:16" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "635:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "686:28:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "696:18:16", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "690:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "741:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "750:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "753:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "743:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "743:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "743:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "729:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "737:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "726:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "726:14:16" - }, - "nodeType": "YulIf", - "src": "723:34:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "766:32:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "780:9:16" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "791:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "776:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "776:22:16" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "770:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "846:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "855:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "858:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "848:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "848:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "848:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "825:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "829:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "821:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "821:13:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "836:7:16" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "817:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "817:27:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "810:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "810:35:16" - }, - "nodeType": "YulIf", - "src": "807:55:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "871:30:16", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "898:2:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "885:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "885:16:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "875:6:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "928:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "937:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "940:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "930:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "930:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "930:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "916:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "924:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "913:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "913:14:16" - }, - "nodeType": "YulIf", - "src": "910:34:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "994:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1003:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1006:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "996:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "996:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "996:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "967:2:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "971:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "963:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "963:15:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "980:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "959:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "959:24:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "985:7:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "956:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "956:37:16" - }, - "nodeType": "YulIf", - "src": "953:57:16" - }, - { - "nodeType": "YulAssignment", - "src": "1019:21:16", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1033:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1037:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1029:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1029:11:16" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1019:6:16" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1049:16:16", - "value": { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1059:6:16" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1049:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "462:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "473:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "485:6:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "493:6:16", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "501:6:16", - "type": "" - } - ], - "src": "406:665:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1177:125:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1187:26:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1199:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1210:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1195:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1195:18:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1187:4:16" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1229:9:16" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1244:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1252:42:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1240:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1240:55:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1222:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1222:74:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1222:74:16" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1146:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1157:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1168:4:16", - "type": "" - } - ], - "src": "1076:226:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1481:296:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1498:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1509:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1491:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1491:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1491:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1532:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1543:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1528:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1528:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1548:2:16", - "type": "", - "value": "66" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1521:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1521:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1521:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1571:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1582:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1567:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1567:18:16" - }, - { - "hexValue": "5472616e73706172656e745570677261646561626c6550726f78793a2061646d", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1587:34:16", - "type": "", - "value": "TransparentUpgradeableProxy: adm" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1560:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1560:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1560:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1642:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1653:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1638:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1638:18:16" - }, - { - "hexValue": "696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1658:34:16", - "type": "", - "value": "in cannot fallback to proxy targ" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1631:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1631:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1631:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1713:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1724:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1709:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1709:19:16" - }, - { - "hexValue": "6574", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1730:4:16", - "type": "", - "value": "et" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1702:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1702:33:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1702:33:16" - }, - { - "nodeType": "YulAssignment", - "src": "1744:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1756:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1767:3:16", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1752:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1752:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1744:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1458:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1472:4:16", - "type": "" - } - ], - "src": "1307:470:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1956:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1973:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1984:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1966:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1966:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1966:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2007:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2018:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2003:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2003:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2023:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1996:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1996:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1996:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2046:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2057:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2042:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2042:18:16" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2062:34:16", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2035:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2035:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2035:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2117:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2128:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2113:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2113:18:16" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2133:8:16", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2106:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2106:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2106:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "2151:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2163:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2174:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2159:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2159:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2151:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1933:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1947:4:16", - "type": "" - } - ], - "src": "1782:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2242:205:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2252:10:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2261:1:16", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2256:1:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2321:63:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2346:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2351:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2342:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2342:11:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2365:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2370:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2361:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2361:11:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2355:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "2355:18:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2335:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2335:39:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2335:39:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2282:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2285:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2279:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "2279:13:16" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2293:19:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2295:15:16", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2304:1:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2307:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2300:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2300:10:16" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2295:1:16" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2275:3:16", - "statements": [] - }, - "src": "2271:113:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2410:31:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2423:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2428:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2419:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2419:16:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2437:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2412:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2412:27:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2412:27:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2399:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2402:6:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2396:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "2396:13:16" - }, - "nodeType": "YulIf", - "src": "2393:48:16" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "2220:3:16", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "2225:3:16", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2230:6:16", - "type": "" - } - ], - "src": "2189:258:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2589:137:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2599:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2619:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2613:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "2613:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2603:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2661:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2669:4:16", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2657:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2657:17:16" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2676:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2681:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "2635:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "2635:53:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2635:53:16" - }, - { - "nodeType": "YulAssignment", - "src": "2697:23:16", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2708:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2713:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2704:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2704:16:16" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2697:3:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2565:3:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2570:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2581:3:16", - "type": "" - } - ], - "src": "2452:274:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2852:321:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2869:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2880:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2862:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2862:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2862:21:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2892:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2912:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2906:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "2906:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2896:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2939:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2950:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2935:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2935:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2955:6:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2928:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2928:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2928:34:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2997:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3005:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2993:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2993:15:16" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3014:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3025:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3010:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3010:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3030:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "2971:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "2971:66:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2971:66:16" - }, - { - "nodeType": "YulAssignment", - "src": "3046:121:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3062:9:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3081:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3089:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3077:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3077:15:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3094:66:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3073:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3073:88:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3058:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3058:104:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3164:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3054:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3054:113:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3046:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2821:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2832:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2843:4:16", - "type": "" - } - ], - "src": "2731:442:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3352:235:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3369:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3380:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3362:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3362:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3362:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3403:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3414:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3399:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3399:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3419:2:16", - "type": "", - "value": "45" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3392:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3392:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3392:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3442:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3453:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3438:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3438:18:16" - }, - { - "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3458:34:16", - "type": "", - "value": "ERC1967: new implementation is n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3431:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3431:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3431:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3513:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3524:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3509:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3509:18:16" - }, - { - "hexValue": "6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3529:15:16", - "type": "", - "value": "ot a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3502:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3502:43:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3502:43:16" - }, - { - "nodeType": "YulAssignment", - "src": "3554:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3566:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3577:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3562:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3562:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3554:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3329:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3343:4:16", - "type": "" - } - ], - "src": "3178:409:16" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n value1 := add(_2, 32)\n value2 := length\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 66)\n mstore(add(headStart, 64), \"TransparentUpgradeableProxy: adm\")\n mstore(add(headStart, 96), \"in cannot fallback to proxy targ\")\n mstore(add(headStart, 128), \"et\")\n tail := add(headStart, 160)\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n }\n function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 45)\n mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n mstore(add(headStart, 96), \"ot a contract\")\n tail := add(headStart, 128)\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "1594": [ - { - "length": 32, - "start": 274 - }, - { - "length": 32, - "start": 374 - }, - { - "length": 32, - "start": 518 - }, - { - "length": 32, - "start": 606 - }, - { - "length": 32, - "start": 647 - }, - { - "length": 32, - "start": 777 - } - ] - }, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x43 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5A JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x7A JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xCB JUMPI PUSH2 0x52 JUMP JUMPDEST CALLDATASIZE PUSH2 0x52 JUMPI PUSH2 0x50 PUSH2 0xE0 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x50 PUSH2 0xE0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x50 PUSH2 0x75 CALLDATASIZE PUSH1 0x4 PUSH2 0x76C JUMP JUMPDEST PUSH2 0xFA JUMP JUMPDEST PUSH2 0x50 PUSH2 0x88 CALLDATASIZE PUSH1 0x4 PUSH2 0x787 JUMP JUMPDEST PUSH2 0x15E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA2 PUSH2 0x1EC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA2 PUSH2 0x244 JUMP JUMPDEST PUSH2 0xE8 PUSH2 0x2F1 JUMP JUMPDEST PUSH2 0xF8 PUSH2 0xF3 PUSH2 0x3E2 JUMP JUMPDEST PUSH2 0x422 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x156 JUMPI PUSH2 0x153 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x446 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x153 PUSH2 0xE0 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x1E4 JUMPI PUSH2 0x1DF DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x446 SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x1DF PUSH2 0xE0 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x239 JUMPI PUSH2 0x234 PUSH2 0x3E2 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x241 PUSH2 0xE0 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x239 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2CE DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x8A4 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x471 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0xF8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x42 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x6574000000000000000000000000000000000000000000000000000000000000 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x234 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x441 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x44F DUP4 PUSH2 0x599 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x45C JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x1DF JUMPI PUSH2 0x46B DUP4 DUP4 PUSH2 0x2A9 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x517 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3D9 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x53F SWAP2 SWAP1 PUSH2 0x836 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x57A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x57F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x58F DUP3 DUP3 DUP7 PUSH2 0x5E6 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5A2 DUP2 PUSH2 0x639 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x5F5 JUMPI POP DUP2 PUSH2 0x2CE JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x605 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3D9 SWAP2 SWAP1 PUSH2 0x852 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x6DD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74206120636F6E747261637400000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3D9 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x767 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2CE DUP3 PUSH2 0x743 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x79C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7A5 DUP5 PUSH2 0x743 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x7C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x7E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x7F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x825 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x80D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x46B JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x848 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x80A JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x871 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x80A JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x706673582212206F7021 0x4C MLOAD 0xCD 0xD4 SHR SDIV 0xBA 0xF INVALID 0xB7 0x2B ADDRESS SWAP13 LOG3 0xC8 0xBE OR DUP16 0xD6 0xE7 EXTCODECOPY SLT AND 0x23 ADDRESS PUSH26 0x9984F364736F6C634300080A0033000000000000000000000000 ", - "sourceMap": "1653:3648:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2903:11:4;:9;:11::i;:::-;1653:3648:15;;2680:11:4;:9;:11::i;4037:134:15:-;;;;;;;;;;-1:-1:-1;4037:134:15;;;;;:::i;:::-;;:::i;4547:164::-;;;;;;:::i;:::-;;:::i;3748:129::-;;;;;;;;;;;;;:::i;:::-;;;1252:42:16;1240:55;;;1222:74;;1210:2;1195:18;3748:129:15;;;;;;;3192:96;;;;;;;;;;;;;:::i;2327:110:4:-;2375:17;:15;:17::i;:::-;2402:28;2412:17;:15;:17::i;:::-;2402:9;:28::i;:::-;2327:110::o;4037:134:15:-;2649:10;:25;5286:6;2649:25;;2645:99;;;4110:54:::1;4128:17;4147:9;;;;;;;;;;;::::0;4158:5:::1;4110:17;:54::i;:::-;4037:134:::0;:::o;2645:99::-;2722:11;:9;:11::i;4547:164::-;2649:10;:25;5286:6;2649:25;;2645:99;;;4656:48:::1;4674:17;4693:4;;4656:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4699:4:15::1;::::0;-1:-1:-1;4656:17:15::1;::::0;-1:-1:-1;;4656:48:15:i:1;:::-;4547:164:::0;;;:::o;2645:99::-;2722:11;:9;:11::i;3748:129::-;3800:23;2649:10;:25;5286:6;2649:25;;2645:99;;;3853:17:::1;:15;:17::i;:::-;3835:35;;3748:129:::0;:::o;2645:99::-;2722:11;:9;:11::i;:::-;3748:129;:::o;3192:96::-;3235:14;2649:10;:25;5286:6;2649:25;;2645:99;;;-1:-1:-1;5286:6:15;;3748:129::o;6575:198:12:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:12:o;1180:320::-;1470:19;;;:23;;;1180:320::o;4986:207:15:-;5057:10;:25;5286:6;5057:25;;;5049:104;;;;;;;1509:2:16;5049:104:15;;;1491:21:16;1548:2;1528:18;;;1521:30;1587:34;1567:18;;;1560:62;1658:34;1638:18;;;1631:62;1730:4;1709:19;;;1702:33;1752:19;;5049:104:15;;;;;;;;1240:140:2;1307:12;1338:35;1035:66:3;1385:54;;;;1306:140;953:895:4;1291:14;1288:1;1285;1272:34;1505:1;1502;1486:14;1483:1;1467:14;1460:5;1447:60;1581:16;1578:1;1575;1560:38;1619:6;1686:66;;;;1801:16;1798:1;1791:27;1686:66;1721:16;1718:1;1711:27;2188:295:3;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;:53::i;:::-;;2188:295;;;:::o;6959:387:12:-;7100:12;1470:19;;;;7124:69;;;;;;;1984:2:16;7124:69:12;;;1966:21:16;2023:2;2003:18;;;1996:30;2062:34;2042:18;;;2035:62;2133:8;2113:18;;;2106:36;2159:19;;7124:69:12;1782:402:16;7124:69:12;7205:12;7219:23;7246:6;:19;;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7204:67;;;;7288:51;7305:7;7314:10;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:12:o;1902:152:3:-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;;;;;;;;;;1902:152;:::o;7566:692:12:-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:12;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;;;;;;;;;;:::i;1537:259:3:-;1470:19:12;;;;1610:95:3;;;;;;;3380:2:16;1610:95:3;;;3362:21:16;3419:2;3399:18;;;3392:30;3458:34;3438:18;;;3431:62;3529:15;3509:18;;;3502:43;3562:19;;1610:95:3;3178:409:16;1610:95:3;1035:66;1715:74;;;;;;;;;;;;;;;1537:259::o;14:196:16:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;406:665::-;485:6;493;501;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;593:29;612:9;593:29;:::i;:::-;583:39;;673:2;662:9;658:18;645:32;696:18;737:2;729:6;726:14;723:34;;;753:1;750;743:12;723:34;791:6;780:9;776:22;766:32;;836:7;829:4;825:2;821:13;817:27;807:55;;858:1;855;848:12;807:55;898:2;885:16;924:2;916:6;913:14;910:34;;;940:1;937;930:12;910:34;985:7;980:2;971:6;967:2;963:15;959:24;956:37;953:57;;;1006:1;1003;996:12;953:57;1037:2;1033;1029:11;1019:21;;1059:6;1049:16;;;;;406:665;;;;;:::o;2189:258::-;2261:1;2271:113;2285:6;2282:1;2279:13;2271:113;;;2361:11;;;2355:18;2342:11;;;2335:39;2307:2;2300:10;2271:113;;;2402:6;2399:1;2396:13;2393:48;;;-1:-1:-1;;2437:1:16;2419:16;;2412:27;2189:258::o;2452:274::-;2581:3;2619:6;2613:13;2635:53;2681:6;2676:3;2669:4;2661:6;2657:17;2635:53;:::i;:::-;2704:16;;;;;2452:274;-1:-1:-1;;2452:274:16:o;2731:442::-;2880:2;2869:9;2862:21;2843:4;2912:6;2906:13;2955:6;2950:2;2939:9;2935:18;2928:34;2971:66;3030:6;3025:2;3014:9;3010:18;3005:2;2997:6;2993:15;2971:66;:::i;:::-;3089:2;3077:15;3094:66;3073:88;3058:104;;;;3164:2;3054:113;;2731:442;-1:-1:-1;;2731:442:16:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "460800", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite", - "admin()": "infinite", - "implementation()": "infinite", - "upgradeTo(address)": "infinite", - "upgradeToAndCall(address,bytes)": "infinite" - }, - "internal": { - "_admin()": "infinite", - "_beforeFallback()": "infinite", - "_getAdmin()": "infinite" - } - }, - "methodIdentifiers": { - "admin()": "f851a440", - "implementation()": "5c60da1b", - "upgradeTo(address)": "3659cfe6", - "upgradeToAndCall(address,bytes)": "4f1ef286" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\":\"OptimizedTransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"},\"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\",\"keccak256\":\"0xa30117644e27fa5b49e162aae2f62b36c1aca02f801b8c594d46e2024963a534\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/Ownable.json b/extendedArtifacts/Ownable.json deleted file mode 100644 index 48052eb..0000000 --- a/extendedArtifacts/Ownable.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "contractName": "Ownable", - "sourceName": "solc_0.8/openzeppelin/access/Ownable.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.", - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the contract setting the deployer as the initial owner." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 7, - "contract": "solc_0.8/openzeppelin/access/Ownable.sol:Ownable", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/OwnershipFacet.json b/extendedArtifacts/OwnershipFacet.json deleted file mode 100644 index eff5b97..0000000 --- a/extendedArtifacts/OwnershipFacet.json +++ /dev/null @@ -1,775 +0,0 @@ -{ - "contractName": "OwnershipFacet", - "sourceName": "solc_0.8/diamond/facets/OwnershipFacet.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "owner_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b506102d6806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b1461003b578063f2fde38b1461006c575b600080fd5b610043610081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007f61007a366004610263565b6100c6565b005b60006100c17fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b6100ce6100da565b6100d7816101a9565b50565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6004015473ffffffffffffffffffffffffffffffffffffffff1633146101a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020828403121561027557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461029957600080fd5b939250505056fea2646970667358221220a9616a828975b8bb9adebff6bc35d6f8701d77d91b887d4901827bd22fe268c664736f6c634300080a0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b1461003b578063f2fde38b1461006c575b600080fd5b610043610081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007f61007a366004610263565b6100c6565b005b60006100c17fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b6100ce6100da565b6100d7816101a9565b50565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6004015473ffffffffffffffffffffffffffffffffffffffff1633146101a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020828403121561027557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461029957600080fd5b939250505056fea2646970667358221220a9616a828975b8bb9adebff6bc35d6f8701d77d91b887d4901827bd22fe268c664736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { - "returns": { - "owner_": "The address of the owner." - } - }, - "transferOwnership(address)": { - "details": "Set _newOwner to address(0) to renounce any ownership.", - "params": { - "_newOwner": "The address of the new owner of the contract" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D6 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x6C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x81 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x263 JUMP JUMPDEST PUSH2 0xC6 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH2 0xC1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xCE PUSH2 0xDA JUMP JUMPDEST PUSH2 0xD7 DUP2 PUSH2 0x1A9 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1A7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A204D75737420626520636F6E7472616374206F776E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6572000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA9 PUSH2 0x6A82 DUP10 PUSH22 0xB8BB9ADEBFF6BC35D6F8701D77D91B887D4901827BD2 0x2F 0xE2 PUSH9 0xC664736F6C63430008 EXP STOP CALLER ", - "sourceMap": "169:330:5:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@contractOwner_855": { - "entryPoint": null, - "id": 855, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@enforceIsContractOwner_869": { - "entryPoint": 218, - "id": 869, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@owner_559": { - "entryPoint": 129, - "id": 559, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@setContractOwner_843": { - "entryPoint": 425, - "id": 843, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@transferOwnership_546": { - "entryPoint": 198, - "id": 546, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 611, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:959:12", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:12", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "115:125:12", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "125:26:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "137:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "148:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "133:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "133:18:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "125:4:12" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "167:9:12" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "182:6:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "190:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "178:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "178:55:12" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "160:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "160:74:12" - }, - "nodeType": "YulExpressionStatement", - "src": "160:74:12" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "84:9:12", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "95:6:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "106:4:12", - "type": "" - } - ], - "src": "14:226:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "315:239:12", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "361:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "370:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "373:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "363:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "363:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "363:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "336:7:12" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "345:9:12" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "332:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "332:23:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "357:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "328:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "328:32:12" - }, - "nodeType": "YulIf", - "src": "325:52:12" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "386:36:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "412:9:12" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "399:12:12" - }, - "nodeType": "YulFunctionCall", - "src": "399:23:12" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "390:5:12", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "508:16:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "517:1:12", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "520:1:12", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "510:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "510:12:12" - }, - "nodeType": "YulExpressionStatement", - "src": "510:12:12" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "444:5:12" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "455:5:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "462:42:12", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "451:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "451:54:12" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "441:2:12" - }, - "nodeType": "YulFunctionCall", - "src": "441:65:12" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "434:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "434:73:12" - }, - "nodeType": "YulIf", - "src": "431:93:12" - }, - { - "nodeType": "YulAssignment", - "src": "533:15:12", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "543:5:12" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "533:6:12" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "281:9:12", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "292:7:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "304:6:12", - "type": "" - } - ], - "src": "245:309:12" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "733:224:12", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "750:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "761:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "743:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "743:21:12" - }, - "nodeType": "YulExpressionStatement", - "src": "743:21:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "784:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "795:2:12", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "780:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "780:18:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "800:2:12", - "type": "", - "value": "34" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "773:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "773:30:12" - }, - "nodeType": "YulExpressionStatement", - "src": "773:30:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "823:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "834:2:12", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "819:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "819:18:12" - }, - { - "hexValue": "4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "839:34:12", - "type": "", - "value": "LibDiamond: Must be contract own" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "812:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "812:62:12" - }, - "nodeType": "YulExpressionStatement", - "src": "812:62:12" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "894:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "905:2:12", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "890:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "890:18:12" - }, - { - "hexValue": "6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "910:4:12", - "type": "", - "value": "er" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "883:6:12" - }, - "nodeType": "YulFunctionCall", - "src": "883:32:12" - }, - "nodeType": "YulExpressionStatement", - "src": "883:32:12" - }, - { - "nodeType": "YulAssignment", - "src": "924:27:12", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "936:9:12" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "947:3:12", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "932:3:12" - }, - "nodeType": "YulFunctionCall", - "src": "932:19:12" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "924:4:12" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "710:9:12", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "724:4:12", - "type": "" - } - ], - "src": "559:398:12" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 34)\n mstore(add(headStart, 64), \"LibDiamond: Must be contract own\")\n mstore(add(headStart, 96), \"er\")\n tail := add(headStart, 128)\n }\n}", - "id": 12, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x6C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x81 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x263 JUMP JUMPDEST PUSH2 0xC6 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH2 0xC1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xCE PUSH2 0xDA JUMP JUMPDEST PUSH2 0xD7 DUP2 PUSH2 0x1A9 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1A7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A204D75737420626520636F6E7472616374206F776E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6572000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x275 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA9 PUSH2 0x6A82 DUP10 PUSH22 0xB8BB9ADEBFF6BC35D6F8701D77D91B887D4901827BD2 0x2F 0xE2 PUSH9 0xC664736F6C63430008 EXP STOP CALLER ", - "sourceMap": "169:330:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;380:117;;;:::i;:::-;;;190:42:12;178:55;;;160:74;;148:2;133:18;380:117:5;;;;;;;210:164;;;;;;:::i;:::-;;:::i;:::-;;380:117;429:14;464:26;2220:30:11;;;;;2121:136;464:26:5;455:35;;380:117;:::o;210:164::-;284:35;:33;:35::i;:::-;329:38;357:9;329:27;:38::i;:::-;210:164;:::o;2263:156:11:-;492:45;2343:30;;;;;2329:10;:44;2321:91;;;;;;;761:2:12;2321:91:11;;;743:21:12;800:2;780:18;;;773:30;839:34;819:18;;;812:62;910:4;890:18;;;883:32;932:19;;2321:91:11;;;;;;;;2263:156::o;1851:264::-;1993:16;;;2019:28;;;1993:16;2019:28;;;;;;;;;2062:46;;492:45;;1993:16;;;;;;2062:46;;1915:25;;2062:46;1905:210;;1851:264;:::o;245:309:12:-;304:6;357:2;345:9;336:7;332:23;328:32;325:52;;;373:1;370;363:12;325:52;412:9;399:23;462:42;455:5;451:54;444:5;441:65;431:93;;520:1;517;510:12;431:93;543:5;245:309;-1:-1:-1;;;245:309:12:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "145200", - "executionCost": "190", - "totalCost": "145390" - }, - "external": { - "owner()": "2311", - "transferOwnership(address)": "28232" - } - }, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"returns\":{\"owner_\":\"The address of the owner.\"}},\"transferOwnership(address)\":{\"details\":\"Set _newOwner to address(0) to renounce any ownership.\",\"params\":{\"_newOwner\":\"The address of the new owner of the contract\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"owner()\":{\"notice\":\"Get the address of the owner\"},\"transferOwnership(address)\":{\"notice\":\"Set the address of the new owner of the contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/facets/OwnershipFacet.sol\":\"OwnershipFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/facets/OwnershipFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\",\"keccak256\":\"0x6502a171801d68e68de6c5a2b879d5e12a3a1539cdc568c2bfcc268fbdf6c5a9\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IERC173.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\",\"keccak256\":\"0x001e07b0fbc894300b939d496ffb005abe398b5bc609802d319b8cdeafe5d36b\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "owner()": { - "notice": "Get the address of the owner" - }, - "transferOwnership(address)": { - "notice": "Set the address of the new owner of the contract" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9" -} \ No newline at end of file diff --git a/extendedArtifacts/Proxied.json b/extendedArtifacts/Proxied.json deleted file mode 100644 index 481dba8..0000000 --- a/extendedArtifacts/Proxied.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "contractName": "Proxied", - "sourceName": "solc_0.8/proxy/Proxied.sol", - "abi": [], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/Proxied.sol\":\"Proxied\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/proxy/Proxied.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xaaceeafeeaf0d200ca3942d8bf14c1c4f787a77f79cc87c08bb668e65acdee29\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "671af58dff9d96540fbd6480e1e9a256" -} \ No newline at end of file diff --git a/extendedArtifacts/Proxy.json b/extendedArtifacts/Proxy.json deleted file mode 100644 index 028db6e..0000000 --- a/extendedArtifacts/Proxy.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "contractName": "Proxy", - "sourceName": "solc_0.8/proxy/Proxy.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ProxyImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousImplementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ProxyImplementationUpdated\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x68c8cf1a340a53d31de8ed808bb66d64e83d50b20d80a0b2dff6aba903cebc98\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "4a46ee6c1a29be400c9fab1ecc28e172" -} \ No newline at end of file diff --git a/extendedArtifacts/ProxyAdmin.json b/extendedArtifacts/ProxyAdmin.json deleted file mode 100644 index f271b30..0000000 --- a/extendedArtifacts/ProxyAdmin.json +++ /dev/null @@ -1,4129 +0,0 @@ -{ - "contractName": "ProxyAdmin", - "sourceName": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeProxyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - } - ], - "name": "getProxyAdmin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - } - ], - "name": "getProxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", - "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", - "kind": "dev", - "methods": { - "changeProxyAdmin(address,address)": { - "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." - }, - "getProxyAdmin(address)": { - "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." - }, - "getProxyImplementation(address)": { - "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "upgrade(address,address)": { - "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." - }, - "upgradeAndCall(address,address,bytes)": { - "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_24": { - "entryPoint": null, - "id": 24, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_726": { - "entryPoint": null, - "id": 726, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_transferOwnership_104": { - "entryPoint": 64, - "id": 104, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 144, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:306:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "95:209:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "141:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "153:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "143:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "143:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "143:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "116:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "125:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "112:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "112:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "137:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "108:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "108:32:16" - }, - "nodeType": "YulIf", - "src": "105:52:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "166:29:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "185:9:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "179:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "179:16:16" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "170:5:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "258:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "267:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "270:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "260:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "260:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "260:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "217:5:16" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "228:5:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:3:16", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "248:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "239:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "239:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "235:19:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "224:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "224:31:16" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "214:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "214:42:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "207:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "207:50:16" - }, - "nodeType": "YulIf", - "src": "204:70:16" - }, - { - "nodeType": "YulAssignment", - "src": "283:15:16", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "293:5:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "283:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "61:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "72:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "84:6:16", - "type": "" - } - ], - "src": "14:290:16" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xB17 CODESIZE SUB DUP1 PUSH2 0xB17 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x90 JUMP JUMPDEST DUP1 PUSH2 0x39 DUP2 PUSH2 0x40 JUMP JUMPDEST POP POP PUSH2 0xC0 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xA48 DUP1 PUSH2 0xCF PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9623609D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x15E JUMPI DUP1 PUSH4 0xF3B7DEAD EQ PUSH2 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x204E1C7A EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xC9 JUMPI DUP1 PUSH4 0x7EFF275E EQ PUSH2 0xE0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x100 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x7E4 JUMP JUMPDEST PUSH2 0x19E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x255 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0xFB CALLDATASIZE PUSH1 0x4 PUSH2 0x808 JUMP JUMPDEST PUSH2 0x2E7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xA0 JUMP JUMPDEST PUSH2 0xDE PUSH2 0x139 CALLDATASIZE PUSH1 0x4 PUSH2 0x870 JUMP JUMPDEST PUSH2 0x3EE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x159 CALLDATASIZE PUSH1 0x4 PUSH2 0x808 JUMP JUMPDEST PUSH2 0x4FC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x179 CALLDATASIZE PUSH1 0x4 PUSH2 0x7E4 JUMP JUMPDEST PUSH2 0x5D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x199 CALLDATASIZE PUSH1 0x4 PUSH2 0x7E4 JUMP JUMPDEST PUSH2 0x701 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH2 0x1EA SWAP1 PUSH32 0x5C60DA1B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x225 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x22A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x24D SWAP2 SWAP1 PUSH2 0x964 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2E5 PUSH1 0x0 PUSH2 0x74D JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x368 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F28397000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x8F283970 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x46F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x4C5 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x981 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x57D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x3659CFE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x3659CFE6 SWAP1 PUSH1 0x24 ADD PUSH2 0x3B8 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x652 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2D2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x6F5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2D2 JUMP JUMPDEST PUSH2 0x6FE DUP2 PUSH2 0x74D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH2 0x1EA SWAP1 PUSH32 0xF851A44000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x6FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x801 DUP2 PUSH2 0x7C2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x81B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x826 DUP2 PUSH2 0x7C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x836 DUP2 PUSH2 0x7C2 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x885 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x890 DUP2 PUSH2 0x7C2 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x8A0 DUP2 PUSH2 0x7C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x8BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x8E3 JUMPI PUSH2 0x8E3 PUSH2 0x841 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x929 JUMPI PUSH2 0x929 PUSH2 0x841 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x942 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x801 DUP2 PUSH2 0x7C2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x40 DUP2 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9CB JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x60 ADD MSTORE DUP3 ADD PUSH2 0x9AF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x9DD JUMPI PUSH1 0x0 PUSH1 0x60 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x60 ADD SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD PUSH13 0x9AB03BFAF9EC60A4BF8CD9890 EXTCODECOPY 0xEC 0xB8 SWAP2 SWAP8 0x4E OR 0xE2 0xD7 PUSH11 0x3B2002C97EEB8964736F6C PUSH4 0x4300080A STOP CALLER ", - "sourceMap": "435:2470:8:-:0;;;473:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;516:12;942:32:0;516:12:8;942:18:0;:32::i;:::-;897:84;473:59:8;435:2470;;2291:187:0;2364:16;2383:6;;-1:-1:-1;;;;;2399:17:0;;;-1:-1:-1;;;;;;2399:17:0;;;;;;2431:40;;2383:6;;;;;;;2431:40;;2364:16;2431:40;2354:124;2291:187;:::o;14:290:16:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:16;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:16:o;:::-;435:2470:8;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_msgSender_1516": { - "entryPoint": null, - "id": 1516, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_transferOwnership_104": { - "entryPoint": 1869, - "id": 104, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@changeProxyAdmin_812": { - "entryPoint": 743, - "id": 812, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@getProxyAdmin_794": { - "entryPoint": 1793, - "id": 794, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getProxyImplementation_760": { - "entryPoint": 414, - "id": 760, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@owner_33": { - "entryPoint": null, - "id": 33, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@renounceOwnership_61": { - "entryPoint": 597, - "id": 61, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@transferOwnership_84": { - "entryPoint": 1489, - "id": 84, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@upgradeAndCall_854": { - "entryPoint": 1006, - "id": 854, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@upgrade_830": { - "entryPoint": 1276, - "id": 830, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_payable_fromMemory": { - "entryPoint": 2404, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$1019": { - "entryPoint": 2020, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$1019t_address": { - "entryPoint": 2056, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$1019t_addresst_bytes_memory_ptr": { - "entryPoint": 2160, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 2433, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x41": { - "entryPoint": 2113, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "validator_revert_contract_TransparentUpgradeableProxy": { - "entryPoint": 1986, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:5535:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "88:109:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "175:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "184:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "187:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "177:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "177:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "177:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "111:5:16" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "122:5:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "129:42:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "118:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "118:54:16" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "108:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "108:65:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "101:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "101:73:16" - }, - "nodeType": "YulIf", - "src": "98:93:16" - } - ] - }, - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "77:5:16", - "type": "" - } - ], - "src": "14:183:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "308:206:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "354:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "363:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "366:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "356:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "356:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "356:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "329:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "338:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "325:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "325:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "350:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "321:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "321:32:16" - }, - "nodeType": "YulIf", - "src": "318:52:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "379:36:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "405:9:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "392:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "392:23:16" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "383:5:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "478:5:16" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "424:53:16" - }, - "nodeType": "YulFunctionCall", - "src": "424:60:16" - }, - "nodeType": "YulExpressionStatement", - "src": "424:60:16" - }, - { - "nodeType": "YulAssignment", - "src": "493:15:16", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "503:5:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "493:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$1019", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "274:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "285:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "297:6:16", - "type": "" - } - ], - "src": "202:312:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "620:125:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "630:26:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "642:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "653:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "638:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "638:18:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "630:4:16" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "672:9:16" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "687:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "695:42:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "683:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "683:55:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "665:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "665:74:16" - }, - "nodeType": "YulExpressionStatement", - "src": "665:74:16" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "589:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "600:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "611:4:16", - "type": "" - } - ], - "src": "519:226:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "873:359:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "919:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "928:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "931:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "921:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "921:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "921:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "894:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "903:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "890:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "890:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "915:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "886:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "886:32:16" - }, - "nodeType": "YulIf", - "src": "883:52:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "944:36:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "970:9:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "957:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "957:23:16" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "948:5:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1043:5:16" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "989:53:16" - }, - "nodeType": "YulFunctionCall", - "src": "989:60:16" - }, - "nodeType": "YulExpressionStatement", - "src": "989:60:16" - }, - { - "nodeType": "YulAssignment", - "src": "1058:15:16", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1068:5:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1058:6:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1082:47:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1114:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1125:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1110:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1110:18:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1097:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "1097:32:16" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "1086:7:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "1192:7:16" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "1138:53:16" - }, - "nodeType": "YulFunctionCall", - "src": "1138:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1138:62:16" - }, - { - "nodeType": "YulAssignment", - "src": "1209:17:16", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "1219:7:16" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1209:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$1019t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "831:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "842:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "854:6:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "862:6:16", - "type": "" - } - ], - "src": "750:482:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1269:152:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1286:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1289:77:16", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1279:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1279:88:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1279:88:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1383:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1386:4:16", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1376:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1376:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1376:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1407:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1410:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1400:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1400:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1400:15:16" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "1237:184:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1575:1201:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1621:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1630:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1633:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1623:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1623:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1623:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1596:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1605:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1592:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1592:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1617:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1588:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1588:32:16" - }, - "nodeType": "YulIf", - "src": "1585:52:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1646:36:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1672:9:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1659:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "1659:23:16" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1650:5:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1745:5:16" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "1691:53:16" - }, - "nodeType": "YulFunctionCall", - "src": "1691:60:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1691:60:16" - }, - { - "nodeType": "YulAssignment", - "src": "1760:15:16", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1770:5:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1760:6:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1784:47:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1816:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1827:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1812:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1812:18:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1799:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "1799:32:16" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "1788:7:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "1894:7:16" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "1840:53:16" - }, - "nodeType": "YulFunctionCall", - "src": "1840:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1840:62:16" - }, - { - "nodeType": "YulAssignment", - "src": "1911:17:16", - "value": { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "1921:7:16" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1911:6:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1937:46:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1968:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1979:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1964:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1964:18:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1951:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "1951:32:16" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1941:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1992:28:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2002:18:16", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1996:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2047:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2056:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2059:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2049:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2049:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2049:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2035:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2043:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2032:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "2032:14:16" - }, - "nodeType": "YulIf", - "src": "2029:34:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2072:32:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2086:9:16" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2097:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2082:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2082:22:16" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "2076:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2152:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2161:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2164:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2154:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2154:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2154:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2131:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2135:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2127:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2127:13:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2142:7:16" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2123:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2123:27:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2116:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2116:35:16" - }, - "nodeType": "YulIf", - "src": "2113:55:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2177:26:16", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2200:2:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2187:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "2187:16:16" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "2181:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2226:22:16", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "2228:16:16" - }, - "nodeType": "YulFunctionCall", - "src": "2228:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2228:18:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2218:2:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2222:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2215:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "2215:10:16" - }, - "nodeType": "YulIf", - "src": "2212:36:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2257:76:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2267:66:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "2261:2:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2342:23:16", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2362:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2356:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "2356:9:16" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "2346:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2374:71:16", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2396:6:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2420:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2424:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2416:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2416:13:16" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2431:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2412:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2412:22:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2436:2:16", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2408:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2408:31:16" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2441:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2404:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2404:40:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2392:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2392:53:16" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "2378:10:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2504:22:16", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "2506:16:16" - }, - "nodeType": "YulFunctionCall", - "src": "2506:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2506:18:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2463:10:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2475:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2460:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "2460:18:16" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2483:10:16" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2495:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2480:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "2480:22:16" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "2457:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "2457:46:16" - }, - "nodeType": "YulIf", - "src": "2454:72:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2542:2:16", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2546:10:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2535:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2535:22:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2535:22:16" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2573:6:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2581:2:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2566:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2566:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2566:18:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2630:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2639:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2642:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2632:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2632:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2632:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2607:2:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2611:2:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2603:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2603:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2616:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2599:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2599:20:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2621:7:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2596:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "2596:33:16" - }, - "nodeType": "YulIf", - "src": "2593:53:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2672:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2680:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2668:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2668:15:16" - }, - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2689:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2693:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2685:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2685:11:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2698:2:16" - } - ], - "functionName": { - "name": "calldatacopy", - "nodeType": "YulIdentifier", - "src": "2655:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "2655:46:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2655:46:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2725:6:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2733:2:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2721:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2721:15:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2738:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2717:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2717:24:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2743:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2710:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2710:35:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2710:35:16" - }, - { - "nodeType": "YulAssignment", - "src": "2754:16:16", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2764:6:16" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "2754:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$1019t_addresst_bytes_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1525:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1536:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1548:6:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1556:6:16", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "1564:6:16", - "type": "" - } - ], - "src": "1426:1350:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2851:206:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2897:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2906:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2909:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2899:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2899:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2899:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2872:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2881:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2868:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2868:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2893:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2864:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2864:32:16" - }, - "nodeType": "YulIf", - "src": "2861:52:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2922:36:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2948:9:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2935:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "2935:23:16" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2926:5:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3021:5:16" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "2967:53:16" - }, - "nodeType": "YulFunctionCall", - "src": "2967:60:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2967:60:16" - }, - { - "nodeType": "YulAssignment", - "src": "3036:15:16", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3046:5:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3036:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2817:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2828:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2840:6:16", - "type": "" - } - ], - "src": "2781:276:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3253:122:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3270:3:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3275:66:16", - "type": "", - "value": "0x5c60da1b00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3263:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3263:79:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3263:79:16" - }, - { - "nodeType": "YulAssignment", - "src": "3351:18:16", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3362:3:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3367:1:16", - "type": "", - "value": "4" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3358:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3358:11:16" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3351:3:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3237:3:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3245:3:16", - "type": "" - } - ], - "src": "3062:313:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3469:199:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3515:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3524:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3527:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3517:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3517:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3517:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3490:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3499:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3486:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3486:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3511:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3482:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3482:32:16" - }, - "nodeType": "YulIf", - "src": "3479:52:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3540:29:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3559:9:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3553:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "3553:16:16" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3544:5:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3632:5:16" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "3578:53:16" - }, - "nodeType": "YulFunctionCall", - "src": "3578:60:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3578:60:16" - }, - { - "nodeType": "YulAssignment", - "src": "3647:15:16", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3657:5:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3647:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_payable_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3435:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3446:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3458:6:16", - "type": "" - } - ], - "src": "3380:288:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3847:182:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3864:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3875:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3857:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3857:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3857:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3898:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3909:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3894:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3894:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3914:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3887:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3887:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3887:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3937:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3948:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3933:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3933:18:16" - }, - { - "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3953:34:16", - "type": "", - "value": "Ownable: caller is not the owner" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3926:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3926:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3926:62:16" - }, - { - "nodeType": "YulAssignment", - "src": "3997:26:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4009:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4020:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4005:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4005:18:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3997:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3824:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3838:4:16", - "type": "" - } - ], - "src": "3673:356:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4181:627:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4198:9:16" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4213:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4221:42:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4209:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4209:55:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4191:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "4191:74:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4191:74:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4274:12:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4284:2:16", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "4278:2:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4306:9:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4317:2:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4302:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4302:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4322:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4295:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "4295:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4295:30:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4334:27:16", - "value": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4354:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4348:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "4348:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "4338:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4381:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4392:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4377:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4377:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4397:6:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4370:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "4370:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4370:34:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4413:10:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4422:1:16", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "4417:1:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4482:90:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4511:9:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4522:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4507:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4507:17:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4526:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4503:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4503:26:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4545:6:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4553:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4541:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4541:14:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4557:2:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4537:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4537:23:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4531:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "4531:30:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4496:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "4496:66:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4496:66:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4443:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4446:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "4440:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "4440:13:16" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "4454:19:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4456:15:16", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4465:1:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4468:2:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4461:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4461:10:16" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4456:1:16" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "4436:3:16", - "statements": [] - }, - "src": "4432:140:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4606:66:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4635:9:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4646:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4631:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4631:22:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4655:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4627:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4627:31:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4660:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4620:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "4620:42:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4620:42:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4587:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4590:6:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4584:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "4584:13:16" - }, - "nodeType": "YulIf", - "src": "4581:91:16" - }, - { - "nodeType": "YulAssignment", - "src": "4681:121:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4697:9:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4716:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4724:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4712:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4712:15:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4729:66:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4708:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4708:88:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4693:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4693:104:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4799:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4689:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4689:113:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4681:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4142:9:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4153:6:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4161:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4172:4:16", - "type": "" - } - ], - "src": "4034:774:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4987:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5004:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5015:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4997:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "4997:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4997:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5038:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5049:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5034:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "5034:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5054:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5027:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "5027:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "5027:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5077:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5088:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5073:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "5073:18:16" - }, - { - "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5093:34:16", - "type": "", - "value": "Ownable: new owner is the zero a" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5066:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "5066:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "5066:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5148:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5159:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5144:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "5144:18:16" - }, - { - "hexValue": "646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5164:8:16", - "type": "", - "value": "ddress" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5137:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "5137:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "5137:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "5182:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5194:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5205:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5190:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "5190:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5182:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4964:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4978:4:16", - "type": "" - } - ], - "src": "4813:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5411:122:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5428:3:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5433:66:16", - "type": "", - "value": "0xf851a44000000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5421:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "5421:79:16" - }, - "nodeType": "YulExpressionStatement", - "src": "5421:79:16" - }, - { - "nodeType": "YulAssignment", - "src": "5509:18:16", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5520:3:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5525:1:16", - "type": "", - "value": "4" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5516:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "5516:11:16" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "5509:3:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "5395:3:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "5403:3:16", - "type": "" - } - ], - "src": "5220:313:16" - } - ] - }, - "contents": "{\n { }\n function validator_revert_contract_TransparentUpgradeableProxy(value)\n {\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$1019(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_contract_TransparentUpgradeableProxy(value)\n value0 := value\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$1019t_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_contract_TransparentUpgradeableProxy(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_contract_TransparentUpgradeableProxy(value_1)\n value1 := value_1\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$1019t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_contract_TransparentUpgradeableProxy(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_contract_TransparentUpgradeableProxy(value_1)\n value1 := value_1\n let offset := calldataload(add(headStart, 64))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := calldataload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n mstore(add(add(memPtr, _3), 32), 0)\n value2 := memPtr\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_contract_TransparentUpgradeableProxy(value)\n value0 := value\n }\n function abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n {\n mstore(pos, 0x5c60da1b00000000000000000000000000000000000000000000000000000000)\n end := add(pos, 4)\n }\n function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_contract_TransparentUpgradeableProxy(value)\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n let _1 := 32\n mstore(add(headStart, _1), 64)\n let length := mload(value1)\n mstore(add(headStart, 64), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 96), mload(add(add(value1, i), _1)))\n }\n if gt(i, length)\n {\n mstore(add(add(headStart, length), 96), 0)\n }\n tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 96)\n }\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n {\n mstore(pos, 0xf851a44000000000000000000000000000000000000000000000000000000000)\n end := add(pos, 4)\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9623609D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x15E JUMPI DUP1 PUSH4 0xF3B7DEAD EQ PUSH2 0x17E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x204E1C7A EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xC9 JUMPI DUP1 PUSH4 0x7EFF275E EQ PUSH2 0xE0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x100 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x7E4 JUMP JUMPDEST PUSH2 0x19E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x255 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0xFB CALLDATASIZE PUSH1 0x4 PUSH2 0x808 JUMP JUMPDEST PUSH2 0x2E7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xA0 JUMP JUMPDEST PUSH2 0xDE PUSH2 0x139 CALLDATASIZE PUSH1 0x4 PUSH2 0x870 JUMP JUMPDEST PUSH2 0x3EE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x14A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x159 CALLDATASIZE PUSH1 0x4 PUSH2 0x808 JUMP JUMPDEST PUSH2 0x4FC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDE PUSH2 0x179 CALLDATASIZE PUSH1 0x4 PUSH2 0x7E4 JUMP JUMPDEST PUSH2 0x5D1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x18A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA0 PUSH2 0x199 CALLDATASIZE PUSH1 0x4 PUSH2 0x7E4 JUMP JUMPDEST PUSH2 0x701 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH2 0x1EA SWAP1 PUSH32 0x5C60DA1B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x225 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x22A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x239 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x24D SWAP2 SWAP1 PUSH2 0x964 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2DB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2E5 PUSH1 0x0 PUSH2 0x74D JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x368 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F28397000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x8F283970 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x46F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x4C5 SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x981 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x57D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x3659CFE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x3659CFE6 SWAP1 PUSH1 0x24 ADD PUSH2 0x3B8 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x652 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x2D2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x6F5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x2D2 JUMP JUMPDEST PUSH2 0x6FE DUP2 PUSH2 0x74D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH2 0x1EA SWAP1 PUSH32 0xF851A44000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x6FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x801 DUP2 PUSH2 0x7C2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x81B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x826 DUP2 PUSH2 0x7C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x836 DUP2 PUSH2 0x7C2 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x885 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x890 DUP2 PUSH2 0x7C2 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x8A0 DUP2 PUSH2 0x7C2 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x8BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x8E3 JUMPI PUSH2 0x8E3 PUSH2 0x841 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x929 JUMPI PUSH2 0x929 PUSH2 0x841 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x942 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x976 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x801 DUP2 PUSH2 0x7C2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x40 DUP2 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9CB JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x60 ADD MSTORE DUP3 ADD PUSH2 0x9AF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x9DD JUMPI PUSH1 0x0 PUSH1 0x60 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x60 ADD SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD PUSH13 0x9AB03BFAF9EC60A4BF8CD9890 EXTCODECOPY 0xEC 0xB8 SWAP2 SWAP8 0x4E OR 0xE2 0xD7 PUSH11 0x3B2002C97EEB8964736F6C PUSH4 0x4300080A STOP CALLER ", - "sourceMap": "435:2470:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;701:437;;;;;;;;;;-1:-1:-1;701:437:8;;;;;:::i;:::-;;:::i;:::-;;;695:42:16;683:55;;;665:74;;653:2;638:18;701:437:8;;;;;;;1689:101:0;;;;;;;;;;;;;:::i;:::-;;1891:148:8;;;;;;;;;;-1:-1:-1;1891:148:8;;;;;:::i;:::-;;:::i;1057:85:0:-;;;;;;;;;;-1:-1:-1;1103:7:0;1129:6;;;1057:85;;2659:244:8;;;;;;:::i;:::-;;:::i;2244:149::-;;;;;;;;;;-1:-1:-1;2244:149:8;;;;;:::i;:::-;;:::i;1939:198:0:-;;;;;;;;;;-1:-1:-1;1939:198:0;;;;;:::i;:::-;;:::i;1298:419:8:-;;;;;;;;;;-1:-1:-1;1298:419:8;;;;;:::i;:::-;;:::i;701:437::-;797:7;974:12;988:23;1023:5;1015:25;;:40;;;;3275:66:16;3263:79;;3367:1;3358:11;;3062:313;1015:40:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;973:82;;;;1073:7;1065:16;;;;;;1109:10;1098:33;;;;;;;;;;;;:::i;:::-;1091:40;701:437;-1:-1:-1;;;;701:437:8:o;1689:101:0:-;1103:7;1129:6;1269:23;1129:6;719:10:13;1269:23:0;1261:68;;;;;;;3875:2:16;1261:68:0;;;3857:21:16;;;3894:18;;;3887:30;3953:34;3933:18;;;3926:62;4005:18;;1261:68:0;;;;;;;;;1753:30:::1;1780:1;1753:18;:30::i;:::-;1689:101::o:0;1891:148:8:-;1103:7:0;1129:6;1269:23;1129:6;719:10:13;1269:23:0;1261:68;;;;;;;3875:2:16;1261:68:0;;;3857:21:16;;;3894:18;;;3887:30;3953:34;3933:18;;;3926:62;4005:18;;1261:68:0;3673:356:16;1261:68:0;2005:27:8::1;::::0;;;;:17:::1;683:55:16::0;;;2005:27:8::1;::::0;::::1;665:74:16::0;2005:17:8;::::1;::::0;::::1;::::0;638:18:16;;2005:27:8::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1891:148:::0;;:::o;2659:244::-;1103:7:0;1129:6;1269:23;1129:6;719:10:13;1269:23:0;1261:68;;;;;;;3875:2:16;1261:68:0;;;3857:21:16;;;3894:18;;;3887:30;3953:34;3933:18;;;3926:62;4005:18;;1261:68:0;3673:356:16;1261:68:0;2834:62:8::1;::::0;;;;:22:::1;::::0;::::1;::::0;::::1;::::0;2864:9:::1;::::0;2834:62:::1;::::0;2875:14;;2891:4;;2834:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;2659:244:::0;;;:::o;2244:149::-;1103:7:0;1129:6;1269:23;1129:6;719:10:13;1269:23:0;1261:68;;;;;;;3875:2:16;1261:68:0;;;3857:21:16;;;3894:18;;;3887:30;3953:34;3933:18;;;3926:62;4005:18;;1261:68:0;3673:356:16;1261:68:0;2355:31:8::1;::::0;;;;:15:::1;683:55:16::0;;;2355:31:8::1;::::0;::::1;665:74:16::0;2355:15:8;::::1;::::0;::::1;::::0;638:18:16;;2355:31:8::1;519:226:16::0;1939:198:0;1103:7;1129:6;1269:23;1129:6;719:10:13;1269:23:0;1261:68;;;;;;;3875:2:16;1261:68:0;;;3857:21:16;;;3894:18;;;3887:30;3953:34;3933:18;;;3926:62;4005:18;;1261:68:0;3673:356:16;1261:68:0;2027:22:::1;::::0;::::1;2019:73;;;::::0;::::1;::::0;;5015:2:16;2019:73:0::1;::::0;::::1;4997:21:16::0;5054:2;5034:18;;;5027:30;5093:34;5073:18;;;5066:62;5164:8;5144:18;;;5137:36;5190:19;;2019:73:0::1;4813:402:16::0;2019:73:0::1;2102:28;2121:8;2102:18;:28::i;:::-;1939:198:::0;:::o;1298:419:8:-;1385:7;1553:12;1567:23;1602:5;1594:25;;:40;;;;5433:66:16;5421:79;;5525:1;5516:11;;5220:313;2291:187:0;2364:16;2383:6;;;2399:17;;;;;;;;;;2431:40;;2383:6;;;;;;;2431:40;;2364:16;2431:40;2354:124;2291:187;:::o;14:183:16:-;129:42;122:5;118:54;111:5;108:65;98:93;;187:1;184;177:12;202:312;297:6;350:2;338:9;329:7;325:23;321:32;318:52;;;366:1;363;356:12;318:52;405:9;392:23;424:60;478:5;424:60;:::i;:::-;503:5;202:312;-1:-1:-1;;;202:312:16:o;750:482::-;854:6;862;915:2;903:9;894:7;890:23;886:32;883:52;;;931:1;928;921:12;883:52;970:9;957:23;989:60;1043:5;989:60;:::i;:::-;1068:5;-1:-1:-1;1125:2:16;1110:18;;1097:32;1138:62;1097:32;1138:62;:::i;:::-;1219:7;1209:17;;;750:482;;;;;:::o;1237:184::-;1289:77;1286:1;1279:88;1386:4;1383:1;1376:15;1410:4;1407:1;1400:15;1426:1350;1548:6;1556;1564;1617:2;1605:9;1596:7;1592:23;1588:32;1585:52;;;1633:1;1630;1623:12;1585:52;1672:9;1659:23;1691:60;1745:5;1691:60;:::i;:::-;1770:5;-1:-1:-1;1827:2:16;1812:18;;1799:32;1840:62;1799:32;1840:62;:::i;:::-;1921:7;-1:-1:-1;1979:2:16;1964:18;;1951:32;2002:18;2032:14;;;2029:34;;;2059:1;2056;2049:12;2029:34;2097:6;2086:9;2082:22;2072:32;;2142:7;2135:4;2131:2;2127:13;2123:27;2113:55;;2164:1;2161;2154:12;2113:55;2200:2;2187:16;2222:2;2218;2215:10;2212:36;;;2228:18;;:::i;:::-;2362:2;2356:9;2424:4;2416:13;;2267:66;2412:22;;;2436:2;2408:31;2404:40;2392:53;;;2460:18;;;2480:22;;;2457:46;2454:72;;;2506:18;;:::i;:::-;2546:10;2542:2;2535:22;2581:2;2573:6;2566:18;2621:7;2616:2;2611;2607;2603:11;2599:20;2596:33;2593:53;;;2642:1;2639;2632:12;2593:53;2698:2;2693;2689;2685:11;2680:2;2672:6;2668:15;2655:46;2743:1;2738:2;2733;2725:6;2721:15;2717:24;2710:35;2764:6;2754:16;;;;;;;1426:1350;;;;;:::o;3380:288::-;3458:6;3511:2;3499:9;3490:7;3486:23;3482:32;3479:52;;;3527:1;3524;3517:12;3479:52;3559:9;3553:16;3578:60;3632:5;3578:60;:::i;4034:774::-;4221:42;4213:6;4209:55;4198:9;4191:74;4172:4;4284:2;4322;4317;4306:9;4302:18;4295:30;4354:6;4348:13;4397:6;4392:2;4381:9;4377:18;4370:34;4422:1;4432:140;4446:6;4443:1;4440:13;4432:140;;;4541:14;;;4537:23;;4531:30;4507:17;;;4526:2;4503:26;4496:66;4461:10;;4432:140;;;4590:6;4587:1;4584:13;4581:91;;;4660:1;4655:2;4646:6;4635:9;4631:22;4627:31;4620:42;4581:91;-1:-1:-1;4724:2:16;4712:15;4729:66;4708:88;4693:104;;;;4799:2;4689:113;;4034:774;-1:-1:-1;;;;4034:774:16:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "526400", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "changeProxyAdmin(address,address)": "infinite", - "getProxyAdmin(address)": "infinite", - "getProxyImplementation(address)": "infinite", - "owner()": "2362", - "renounceOwnership()": "28098", - "transferOwnership(address)": "infinite", - "upgrade(address,address)": "infinite", - "upgradeAndCall(address,address,bytes)": "infinite" - } - }, - "methodIdentifiers": { - "changeProxyAdmin(address,address)": "7eff275e", - "getProxyAdmin(address)": "f3b7dead", - "getProxyImplementation(address)": "204e1c7a", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b", - "upgrade(address,address)": "99a88ec4", - "upgradeAndCall(address,address,bytes)": "9623609d" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 7, - "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/StorageSlot.json b/extendedArtifacts/StorageSlot.json deleted file mode 100644 index 2da5e36..0000000 --- a/extendedArtifacts/StorageSlot.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "contractName": "StorageSlot", - "sourceName": "solc_0.8/openzeppelin/utils/StorageSlot.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202c3c9ef4b5a3f95d9e0b3106fa3a2a72e17ddfa9671fded245135625621ec1de64736f6c634300080a0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202c3c9ef4b5a3f95d9e0b3106fa3a2a72e17ddfa9671fded245135625621ec1de64736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 { bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\"); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2C EXTCODECOPY SWAP15 DELEGATECALL 0xB5 LOG3 0xF9 0x5D SWAP15 SIGNEXTEND BALANCE MOD STATICCALL GASPRICE 0x2A PUSH19 0xE17DDFA9671FDED245135625621EC1DE64736F PUSH13 0x634300080A0033000000000000 ", - "sourceMap": "1264:1219:14:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1264:1219:14;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2C EXTCODECOPY SWAP15 DELEGATECALL 0xB5 LOG3 0xF9 0x5D SWAP15 SIGNEXTEND BALANCE MOD STATICCALL GASPRICE 0x2A PUSH19 0xE17DDFA9671FDED245135625621EC1DE64736F PUSH13 0x634300080A0033000000000000 ", - "sourceMap": "1264:1219:14:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "getAddressSlot(bytes32)": "infinite", - "getBooleanSlot(bytes32)": "infinite", - "getBytes32Slot(bytes32)": "infinite", - "getUint256Slot(bytes32)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 { bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\"); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/TransparentUpgradeableProxy.json b/extendedArtifacts/TransparentUpgradeableProxy.json deleted file mode 100644 index c8a9895..0000000 --- a/extendedArtifacts/TransparentUpgradeableProxy.json +++ /dev/null @@ -1,6723 +0,0 @@ -{ - "contractName": "TransparentUpgradeableProxy", - "sourceName": "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", - "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", - "kind": "dev", - "methods": { - "admin()": { - "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" - }, - "changeAdmin(address)": { - "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." - }, - "constructor": { - "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." - }, - "implementation()": { - "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_155": { - "entryPoint": null, - "id": 155, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_896": { - "entryPoint": null, - "id": 896, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_changeAdmin_389": { - "entryPoint": 292, - "id": 389, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_getAdmin_346": { - "entryPoint": 496, - "id": 346, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setAdmin_372": { - "entryPoint": 553, - "id": 372, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setImplementation_224": { - "entryPoint": 734, - "id": 224, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeToAndCall_269": { - "entryPoint": 231, - "id": 269, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_upgradeTo_239": { - "entryPoint": 383, - "id": 239, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@functionDelegateCall_1437": { - "entryPoint": 449, - "id": 1437, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_1472": { - "entryPoint": 897, - "id": 1472, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_1552": { - "entryPoint": 1127, - "id": 1552, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_1227": { - "entryPoint": 1130, - "id": 1227, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_1503": { - "entryPoint": 1145, - "id": 1503, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 1207, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 1305, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 1589, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 1619, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 1529, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 1258, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x01": { - "entryPoint": 1567, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1236, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4209:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:117:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "84:22:16", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "99:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "93:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "93:13:16" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "84:5:16" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "169:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "178:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "181:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "171:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "171:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "171:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "128:5:16" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "139:5:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "154:3:16", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "150:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "150:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "163:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "146:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "146:19:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "135:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "135:31:16" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "125:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "125:42:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "118:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "118:50:16" - }, - "nodeType": "YulIf", - "src": "115:70:16" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:16", - "type": "" - } - ], - "src": "14:177:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "228:95:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "245:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "257:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "248:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "248:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "238:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "238:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "238:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "285:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "288:4:16", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "278:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "278:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "278:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "302:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "302:15:16" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "196:127:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "381:205:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "391:10:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "400:1:16", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "395:1:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "460:63:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "485:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "490:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "481:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "481:11:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "504:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "509:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "500:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "500:11:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "494:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "494:18:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "474:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "474:39:16" - }, - "nodeType": "YulExpressionStatement", - "src": "474:39:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "421:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "424:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "418:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "418:13:16" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "432:19:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "434:15:16", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "443:1:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "446:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "439:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "439:10:16" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "434:1:16" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "414:3:16", - "statements": [] - }, - "src": "410:113:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "549:31:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "562:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "567:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "558:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "558:16:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "576:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "551:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "551:27:16" - }, - "nodeType": "YulExpressionStatement", - "src": "551:27:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "538:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "541:6:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "535:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "535:13:16" - }, - "nodeType": "YulIf", - "src": "532:48:16" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "359:3:16", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "364:3:16", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "369:6:16", - "type": "" - } - ], - "src": "328:258:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "715:929:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "761:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "770:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "773:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "763:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "763:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "763:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "736:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "745:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "732:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "732:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "757:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "728:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "728:32:16" - }, - "nodeType": "YulIf", - "src": "725:52:16" - }, - { - "nodeType": "YulAssignment", - "src": "786:50:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "826:9:16" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "796:29:16" - }, - "nodeType": "YulFunctionCall", - "src": "796:40:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "786:6:16" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "845:59:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "889:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "900:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "885:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "885:18:16" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "855:29:16" - }, - "nodeType": "YulFunctionCall", - "src": "855:49:16" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "845:6:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "913:39:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "937:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "948:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "933:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "933:18:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "927:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "927:25:16" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "917:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "961:28:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "979:2:16", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "983:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "975:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "975:10:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "987:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "971:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "971:18:16" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "965:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1016:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1025:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1028:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1018:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1018:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1018:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1004:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1012:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1001:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1001:14:16" - }, - "nodeType": "YulIf", - "src": "998:34:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1041:32:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1055:9:16" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1066:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1051:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1051:22:16" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1045:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1121:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1130:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1133:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1123:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1123:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1123:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1100:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1104:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1096:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1096:13:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1111:7:16" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1092:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1092:27:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1085:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1085:35:16" - }, - "nodeType": "YulIf", - "src": "1082:55:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1146:19:16", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1162:2:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1156:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "1156:9:16" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1150:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1188:22:16", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1190:16:16" - }, - "nodeType": "YulFunctionCall", - "src": "1190:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1190:18:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1180:2:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1184:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1177:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1177:10:16" - }, - "nodeType": "YulIf", - "src": "1174:36:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1219:17:16", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1233:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1229:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1229:7:16" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1223:2:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1245:23:16", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1265:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1259:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "1259:9:16" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1249:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1277:71:16", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1299:6:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1323:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1327:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1319:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1319:13:16" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1334:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1315:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1315:22:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1339:2:16", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1311:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1311:31:16" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1344:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1307:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1307:40:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1295:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1295:53:16" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1281:10:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1407:22:16", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1409:16:16" - }, - "nodeType": "YulFunctionCall", - "src": "1409:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1409:18:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1366:10:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1378:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1363:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1363:18:16" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1386:10:16" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1398:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1383:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1383:22:16" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1360:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1360:46:16" - }, - "nodeType": "YulIf", - "src": "1357:72:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1445:2:16", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1449:10:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1438:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1438:22:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1438:22:16" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1476:6:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1484:2:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1469:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1469:18:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1469:18:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1533:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1542:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1545:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1535:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1535:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1535:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1510:2:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1514:2:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1506:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1506:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1519:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1502:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1502:20:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1524:7:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1499:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1499:33:16" - }, - "nodeType": "YulIf", - "src": "1496:53:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1584:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1588:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1580:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1580:11:16" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1597:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1605:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1593:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1593:15:16" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1610:2:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1558:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "1558:55:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1558:55:16" - }, - { - "nodeType": "YulAssignment", - "src": "1622:16:16", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1632:6:16" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1622:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "665:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "676:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "688:6:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "696:6:16", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "704:6:16", - "type": "" - } - ], - "src": "591:1053:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1698:173:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1728:111:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1749:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1756:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1761:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1752:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1752:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1742:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1742:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1742:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1793:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1796:4:16", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1786:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1786:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1786:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1821:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1824:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1814:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1814:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1814:15:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1714:1:16" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1717:1:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1711:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "1711:8:16" - }, - "nodeType": "YulIf", - "src": "1708:131:16" - }, - { - "nodeType": "YulAssignment", - "src": "1848:17:16", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1860:1:16" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1863:1:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1856:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1856:9:16" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "1848:4:16" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "1680:1:16", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "1683:1:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "1689:4:16", - "type": "" - } - ], - "src": "1649:222:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1908:95:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1925:1:16", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1932:3:16", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1937:10:16", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1928:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1928:20:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1918:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1918:31:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1918:31:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1965:1:16", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1968:4:16", - "type": "", - "value": "0x01" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1958:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1958:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1958:15:16" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1989:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1992:4:16", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1982:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1982:15:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1982:15:16" - } - ] - }, - "name": "panic_error_0x01", - "nodeType": "YulFunctionDefinition", - "src": "1876:127:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2137:175:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2147:26:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2159:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2170:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2155:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2155:18:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2147:4:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2182:29:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2200:3:16", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2205:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2196:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2196:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2209:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2192:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2192:19:16" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2186:2:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2227:9:16" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2242:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2250:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2238:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2238:15:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2220:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2220:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2220:34:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2274:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2285:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2270:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2270:18:16" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2294:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2302:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2290:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2290:15:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2263:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2263:43:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2263:43:16" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2098:9:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2109:6:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2117:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2128:4:16", - "type": "" - } - ], - "src": "2008:304:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2491:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2508:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2519:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2501:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2501:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2501:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2542:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2553:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2538:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2538:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2558:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2531:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2531:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2531:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2581:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2592:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2577:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2577:18:16" - }, - { - "hexValue": "455243313936373a206e65772061646d696e20697320746865207a65726f2061", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2597:34:16", - "type": "", - "value": "ERC1967: new admin is the zero a" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2570:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2570:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2570:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2652:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2663:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2648:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2648:18:16" - }, - { - "hexValue": "646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2668:8:16", - "type": "", - "value": "ddress" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2641:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2641:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2641:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "2686:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2698:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2709:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2694:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2694:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2686:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2468:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2482:4:16", - "type": "" - } - ], - "src": "2317:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2898:235:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2915:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2926:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2908:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2908:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2908:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2949:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2960:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2945:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2945:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2965:2:16", - "type": "", - "value": "45" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2938:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2938:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2938:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2988:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2999:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2984:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2984:18:16" - }, - { - "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3004:34:16", - "type": "", - "value": "ERC1967: new implementation is n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2977:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2977:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2977:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3059:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3070:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3055:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3055:18:16" - }, - { - "hexValue": "6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3075:15:16", - "type": "", - "value": "ot a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3048:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3048:43:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3048:43:16" - }, - { - "nodeType": "YulAssignment", - "src": "3100:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3112:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3123:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3108:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3108:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3100:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2875:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2889:4:16", - "type": "" - } - ], - "src": "2724:409:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3312:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3329:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3340:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3322:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3322:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3322:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3363:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3374:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3359:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3359:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3379:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3352:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3352:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3352:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3402:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3413:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3398:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3398:18:16" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3418:34:16", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3391:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3391:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3391:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3473:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3484:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3469:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3469:18:16" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3489:8:16", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3462:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3462:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3462:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "3507:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3519:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3530:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3515:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3515:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3507:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3289:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3303:4:16", - "type": "" - } - ], - "src": "3138:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3682:137:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3692:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3712:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3706:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "3706:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3696:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3754:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3762:4:16", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3750:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3750:17:16" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3769:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3774:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3728:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "3728:53:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3728:53:16" - }, - { - "nodeType": "YulAssignment", - "src": "3790:23:16", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3801:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3806:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3797:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3797:16:16" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3790:3:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3658:3:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3663:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3674:3:16", - "type": "" - } - ], - "src": "3545:274:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3945:262:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3962:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3973:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3955:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3955:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3955:21:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3985:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4005:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3999:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "3999:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3989:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4032:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4043:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4028:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4028:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4048:6:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4021:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "4021:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4021:34:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4090:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4098:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4086:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4086:15:16" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4107:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4118:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4103:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4103:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4123:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "4064:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "4064:66:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4064:66:16" - }, - { - "nodeType": "YulAssignment", - "src": "4139:62:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4155:9:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4174:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4182:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4170:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4170:15:16" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4191:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "4187:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4187:7:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4166:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4166:29:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4151:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4151:45:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4198:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4147:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4147:54:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4139:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3914:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3925:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3936:4:16", - "type": "" - } - ], - "src": "3824:383:16" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n let offset := mload(add(headStart, 64))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value2 := memPtr\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n diff := sub(x, y)\n }\n function panic_error_0x01()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x01)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"ERC1967: new admin is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 45)\n mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n mstore(add(headStart, 96), \"ot a contract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0x11B2 CODESIZE SUB DUP1 PUSH3 0x11B2 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x519 JUMP JUMPDEST DUP3 DUP2 PUSH3 0x55 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH3 0x5F9 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x116B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0x75 JUMPI PUSH3 0x75 PUSH3 0x61F JUMP JUMPDEST PUSH3 0x83 DUP3 DUP3 PUSH1 0x0 PUSH3 0xE7 JUMP JUMPDEST POP PUSH3 0xB3 SWAP1 POP PUSH1 0x1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6104 PUSH3 0x5F9 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x114B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0xD3 JUMPI PUSH3 0xD3 PUSH3 0x61F JUMP JUMPDEST PUSH3 0xDE DUP3 PUSH3 0x124 JUMP JUMPDEST POP POP POP PUSH3 0x688 JUMP JUMPDEST PUSH3 0xF2 DUP4 PUSH3 0x17F JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH3 0x100 JUMPI POP DUP1 JUMPDEST ISZERO PUSH3 0x11F JUMPI PUSH3 0x11D DUP4 DUP4 PUSH3 0x1C1 PUSH1 0x20 SHL PUSH3 0x2FF OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH3 0x14F PUSH3 0x1F0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH3 0x17C DUP2 PUSH3 0x229 JUMP JUMPDEST POP JUMP JUMPDEST PUSH3 0x18A DUP2 PUSH3 0x2DE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH3 0x1E9 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x118B PUSH1 0x27 SWAP2 CODECOPY PUSH3 0x381 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x21A PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x114B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x467 PUSH1 0x20 SHL PUSH3 0x273 OR PUSH1 0x20 SHR JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x294 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH3 0x2BD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x114B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x467 PUSH1 0x20 SHL PUSH3 0x273 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH3 0x2F4 DUP2 PUSH3 0x46A PUSH1 0x20 SHL PUSH3 0x32B OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x358 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x28B JUMP JUMPDEST DUP1 PUSH3 0x2BD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x116B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x467 PUSH1 0x20 SHL PUSH3 0x273 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH3 0x3EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x28B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH3 0x408 SWAP2 SWAP1 PUSH3 0x635 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x445 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x44A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH3 0x45D DUP3 DUP3 DUP7 PUSH3 0x479 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH3 0x48A JUMPI POP DUP2 PUSH3 0x1E9 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH3 0x49B JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x28B SWAP2 SWAP1 PUSH3 0x653 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x507 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x4ED JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x11D JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x52F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x53A DUP5 PUSH3 0x4B7 JUMP JUMPDEST SWAP3 POP PUSH3 0x54A PUSH1 0x20 DUP6 ADD PUSH3 0x4B7 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x568 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x57D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x592 JUMPI PUSH3 0x592 PUSH3 0x4D4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x5BD JUMPI PUSH3 0x5BD PUSH3 0x4D4 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x5D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x5EA DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x4EA JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH3 0x61A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x649 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x4EA JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH3 0x674 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH3 0x4EA JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xAB3 DUP1 PUSH3 0x698 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xE6 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x106 JUMPI PUSH2 0x6D JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x75 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x95 JUMPI PUSH2 0x6D JUMP JUMPDEST CALLDATASIZE PUSH2 0x6D JUMPI PUSH2 0x6B PUSH2 0x11B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x6B PUSH2 0x11B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x91F JUMP JUMPDEST PUSH2 0x135 JUMP JUMPDEST PUSH2 0x6B PUSH2 0xA3 CALLDATASIZE PUSH1 0x4 PUSH2 0x93A JUMP JUMPDEST PUSH2 0x196 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBD PUSH2 0x221 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B PUSH2 0x101 CALLDATASIZE PUSH1 0x4 PUSH2 0x91F JUMP JUMPDEST PUSH2 0x276 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x112 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBD PUSH2 0x2BA JUMP JUMPDEST PUSH2 0x123 PUSH2 0x347 JUMP JUMPDEST PUSH2 0x133 PUSH2 0x12E PUSH2 0x435 JUMP JUMPDEST PUSH2 0x43F JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x13D PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x18E JUMPI PUSH2 0x18B DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x4A3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x18B PUSH2 0x11B JUMP JUMPDEST PUSH2 0x19E PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x219 JUMPI PUSH2 0x214 DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x4A3 SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x214 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22B PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x26B JUMPI PUSH2 0x266 PUSH2 0x435 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x273 PUSH2 0x11B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x27E PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x18E JUMPI PUSH2 0x18B DUP2 PUSH2 0x4CE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C4 PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x26B JUMPI PUSH2 0x266 PUSH2 0x463 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x324 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA57 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x52F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x34F PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x133 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x42 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x6574000000000000000000000000000000000000000000000000000000000000 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x266 PUSH2 0x657 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x45E JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4AC DUP4 PUSH2 0x67F JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x4B9 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x214 JUMPI PUSH2 0x4C8 DUP4 DUP4 PUSH2 0x2FF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x4F7 PUSH2 0x463 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x18B DUP2 PUSH2 0x6CC JUMP JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x5D5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x42C JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x5FD SWAP2 SWAP1 PUSH2 0x9E9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x638 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x63D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x64D DUP3 DUP3 DUP7 PUSH2 0x7D8 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x487 JUMP JUMPDEST PUSH2 0x688 DUP2 PUSH2 0x82B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x76F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x42C JUMP JUMPDEST DUP1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x7E7 JUMPI POP DUP2 PUSH2 0x324 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x7F7 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x42C SWAP2 SWAP1 PUSH2 0xA05 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x8CF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74206120636F6E747261637400000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x42C JUMP JUMPDEST DUP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x792 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x91A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x324 DUP3 PUSH2 0x8F6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x94F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x958 DUP5 PUSH2 0x8F6 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x975 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x989 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x998 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x9AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9D8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9C0 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x4C8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x9FB DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x9BD JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xA24 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x9BD JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x70667358221220B29CAA SLOAD CALLER PUSH12 0x3EE836679675E9732EC5E526 0xFB EXTCODEHASH DUP1 EXTCODECOPY 0xCA 0x2F 0xE3 CALLDATASIZE 0xCC CALLDATALOAD SSTORE 0xAB 0xA6 0x22 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER 0xB5 BALANCE 0x27 PUSH9 0x4A568B3173AE13B9F8 0xA6 ADD PUSH15 0x243E63B6E8EE1178D6A717850B5D61 SUB CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC416464726573733A206C6F PUSH24 0x2D6C6576656C2064656C65676174652063616C6C20666169 PUSH13 0x65640000000000000000000000 ", - "sourceMap": "1634:3556:9:-:0;;;1908:254;;;;;;;;;;;;;;;;;;:::i;:::-;2023:6;2031:5;1050:54:2;1103:1;1058:41;1050:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;1018:87:2;1011:95;;;;:::i;:::-;1116:39;1134:6;1142:5;1149;1116:17;:39::i;:::-;-1:-1:-1;2078:45:9::1;::::0;-1:-1:-1;2122:1:9::1;2086:32;2078:45;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;2055:69:9::1;2048:77;;;;:::i;:::-;2135:20;2148:6:::0;2135:12:::1;:20::i;:::-;1908:254:::0;;;1634:3556;;2188:295:3;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;;;;;:53;;:::i;:::-;;2365:112;2188:295;;;:::o;4637:135::-;4701:35;4714:11;:9;:11::i;:::-;4701:35;;;-1:-1:-1;;;;;2238:15:16;;;2220:34;;2290:15;;;2285:2;2270:18;;2263:43;2155:18;4701:35:3;;;;;;;4746:19;4756:8;4746:9;:19::i;:::-;4637:135;:::o;1902:152::-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;-1:-1:-1;;;;;2020:27:3;;;;;;;;1902:152;:::o;6575:198:12:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:12:o;4113:130:3:-;4165:7;4191:39;-1:-1:-1;;;;;;;;;;;4218:11:3;;4191:26;;;;;:39;;:::i;:::-;:45;-1:-1:-1;;;;;4191:45:3;;4113:130;-1:-1:-1;4113:130:3:o;4325:201::-;-1:-1:-1;;;;;4388:22:3;;4380:73;;;;-1:-1:-1;;;4380:73:3;;2519:2:16;4380:73:3;;;2501:21:16;2558:2;2538:18;;;2531:30;2597:34;2577:18;;;2570:62;-1:-1:-1;;;2648:18:16;;;2641:36;2694:19;;4380:73:3;;;;;;;;;4511:8;4463:39;-1:-1:-1;;;;;;;;;;;4490:11:3;;4463:26;;;;;:39;;:::i;:::-;:56;;-1:-1:-1;;;;;;4463:56:3;-1:-1:-1;;;;;4463:56:3;;;;;;;;;;-1:-1:-1;4325:201:3:o;1537:259::-;1618:37;1637:17;1618:18;;;;;:37;;:::i;:::-;1610:95;;;;-1:-1:-1;;;1610:95:3;;2926:2:16;1610:95:3;;;2908:21:16;2965:2;2945:18;;;2938:30;3004:34;2984:18;;;2977:62;-1:-1:-1;;;3055:18:16;;;3048:43;3108:19;;1610:95:3;2724:409:16;1610:95:3;1772:17;1715:48;-1:-1:-1;;;;;;;;;;;1742:20:3;;1715:26;;;;;:48;;:::i;6959:387:12:-;7100:12;-1:-1:-1;;;;;1470:19:12;;;7124:69;;;;-1:-1:-1;;;7124:69:12;;3340:2:16;7124:69:12;;;3322:21:16;3379:2;3359:18;;;3352:30;3418:34;3398:18;;;3391:62;-1:-1:-1;;;3469:18:16;;;3462:36;3515:19;;7124:69:12;3138:402:16;7124:69:12;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:12;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7204:67:12;;-1:-1:-1;7204:67:12;-1:-1:-1;7288:51:12;7204:67;;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:12:o;1599:147:14:-;1726:4;1599:147::o;1180:320:12:-;-1:-1:-1;;;;;1470:19:12;;:23;;;1180:320::o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:12;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:12;;;;;;;;:::i;14:177:16:-;93:13;;-1:-1:-1;;;;;135:31:16;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:258;400:1;410:113;424:6;421:1;418:13;410:113;;;500:11;;;494:18;481:11;;;474:39;446:2;439:10;410:113;;;541:6;538:1;535:13;532:48;;;-1:-1:-1;;576:1:16;558:16;;551:27;328:258::o;591:1053::-;688:6;696;704;757:2;745:9;736:7;732:23;728:32;725:52;;;773:1;770;763:12;725:52;796:40;826:9;796:40;:::i;:::-;786:50;;855:49;900:2;889:9;885:18;855:49;:::i;:::-;948:2;933:18;;927:25;845:59;;-1:-1:-1;;;;;;1001:14:16;;;998:34;;;1028:1;1025;1018:12;998:34;1066:6;1055:9;1051:22;1041:32;;1111:7;1104:4;1100:2;1096:13;1092:27;1082:55;;1133:1;1130;1123:12;1082:55;1162:2;1156:9;1184:2;1180;1177:10;1174:36;;;1190:18;;:::i;:::-;1265:2;1259:9;1233:2;1319:13;;-1:-1:-1;;1315:22:16;;;1339:2;1311:31;1307:40;1295:53;;;1363:18;;;1383:22;;;1360:46;1357:72;;;1409:18;;:::i;:::-;1449:10;1445:2;1438:22;1484:2;1476:6;1469:18;1524:7;1519:2;1514;1510;1506:11;1502:20;1499:33;1496:53;;;1545:1;1542;1535:12;1496:53;1558:55;1610:2;1605;1597:6;1593:15;1588:2;1584;1580:11;1558:55;:::i;:::-;1632:6;1622:16;;;;;;;591:1053;;;;;:::o;1649:222::-;1689:4;1717:1;1714;1711:8;1708:131;;;1761:10;1756:3;1752:20;1749:1;1742:31;1796:4;1793:1;1786:15;1824:4;1821:1;1814:15;1708:131;-1:-1:-1;1856:9:16;;1649:222::o;1876:127::-;1937:10;1932:3;1928:20;1925:1;1918:31;1968:4;1965:1;1958:15;1992:4;1989:1;1982:15;3545:274;3674:3;3712:6;3706:13;3728:53;3774:6;3769:3;3762:4;3754:6;3750:17;3728:53;:::i;:::-;3797:16;;;;;3545:274;-1:-1:-1;;3545:274:16:o;3824:383::-;3973:2;3962:9;3955:21;3936:4;4005:6;3999:13;4048:6;4043:2;4032:9;4028:18;4021:34;4064:66;4123:6;4118:2;4107:9;4103:18;4098:2;4090:6;4086:15;4064:66;:::i;:::-;4191:2;4170:15;-1:-1:-1;;4166:29:16;4151:45;;;;4198:2;4147:54;;3824:383;-1:-1:-1;;3824:383:16:o;:::-;1634:3556:9;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_524": { - "entryPoint": null, - "id": 524, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_532": { - "entryPoint": null, - "id": 532, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_1018": { - "entryPoint": 839, - "id": 1018, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_537": { - "entryPoint": null, - "id": 537, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_changeAdmin_389": { - "entryPoint": 1230, - "id": 389, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_delegate_497": { - "entryPoint": 1087, - "id": 497, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_fallback_516": { - "entryPoint": 283, - "id": 516, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getAdmin_346": { - "entryPoint": 1123, - "id": 346, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_getImplementation_200": { - "entryPoint": 1623, - "id": 200, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_implementation_167": { - "entryPoint": 1077, - "id": 167, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setAdmin_372": { - "entryPoint": 1740, - "id": 372, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setImplementation_224": { - "entryPoint": 2091, - "id": 224, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeToAndCall_269": { - "entryPoint": 1187, - "id": 269, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_upgradeTo_239": { - "entryPoint": 1663, - "id": 239, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@admin_926": { - "entryPoint": 698, - "id": 926, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@changeAdmin_953": { - "entryPoint": 630, - "id": 953, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@functionDelegateCall_1437": { - "entryPoint": 767, - "id": 1437, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_1472": { - "entryPoint": 1327, - "id": 1472, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_1552": { - "entryPoint": null, - "id": 1552, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@implementation_940": { - "entryPoint": 545, - "id": 940, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@isContract_1227": { - "entryPoint": 811, - "id": 1227, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@upgradeToAndCall_988": { - "entryPoint": 406, - "id": 988, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@upgradeTo_971": { - "entryPoint": 309, - "id": 971, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@verifyCallResult_1503": { - "entryPoint": 2008, - "id": 1503, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_address": { - "entryPoint": 2294, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 2335, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_calldata_ptr": { - "entryPoint": 2362, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 2537, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 2565, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 2493, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4328:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "63:147:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "73:29:16", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "95:6:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "82:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "82:20:16" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "73:5:16" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "188:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "197:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "200:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "190:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "190:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "190:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "124:5:16" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "135:5:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "142:42:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "131:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "131:54:16" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "121:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "121:65:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "114:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "114:73:16" - }, - "nodeType": "YulIf", - "src": "111:93:16" - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "42:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:16", - "type": "" - } - ], - "src": "14:196:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "285:116:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "331:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "340:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "333:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "333:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "333:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "306:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "315:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "302:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "302:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "327:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "298:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "298:32:16" - }, - "nodeType": "YulIf", - "src": "295:52:16" - }, - { - "nodeType": "YulAssignment", - "src": "356:39:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "385:9:16" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "366:18:16" - }, - "nodeType": "YulFunctionCall", - "src": "366:29:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "356:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "251:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "262:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "274:6:16", - "type": "" - } - ], - "src": "215:186:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "512:559:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "558:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "567:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "570:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "560:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "560:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "560:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "533:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "542:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "529:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "529:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "554:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "525:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "525:32:16" - }, - "nodeType": "YulIf", - "src": "522:52:16" - }, - { - "nodeType": "YulAssignment", - "src": "583:39:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "612:9:16" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "593:18:16" - }, - "nodeType": "YulFunctionCall", - "src": "593:29:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "583:6:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "631:46:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "662:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "673:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "658:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "658:18:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "645:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "645:32:16" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "635:6:16", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "686:28:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "696:18:16", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "690:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "741:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "750:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "753:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "743:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "743:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "743:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "729:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "737:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "726:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "726:14:16" - }, - "nodeType": "YulIf", - "src": "723:34:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "766:32:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "780:9:16" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "791:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "776:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "776:22:16" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "770:2:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "846:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "855:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "858:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "848:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "848:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "848:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "825:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "829:4:16", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "821:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "821:13:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "836:7:16" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "817:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "817:27:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "810:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "810:35:16" - }, - "nodeType": "YulIf", - "src": "807:55:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "871:30:16", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "898:2:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "885:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "885:16:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "875:6:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "928:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "937:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "940:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "930:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "930:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "930:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "916:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "924:2:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "913:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "913:14:16" - }, - "nodeType": "YulIf", - "src": "910:34:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "994:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1003:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1006:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "996:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "996:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "996:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "967:2:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "971:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "963:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "963:15:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "980:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "959:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "959:24:16" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "985:7:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "956:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "956:37:16" - }, - "nodeType": "YulIf", - "src": "953:57:16" - }, - { - "nodeType": "YulAssignment", - "src": "1019:21:16", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1033:2:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1037:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1029:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1029:11:16" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1019:6:16" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1049:16:16", - "value": { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1059:6:16" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1049:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "462:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "473:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "485:6:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "493:6:16", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "501:6:16", - "type": "" - } - ], - "src": "406:665:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1177:125:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1187:26:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1199:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1210:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1195:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1195:18:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1187:4:16" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1229:9:16" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1244:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1252:42:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1240:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1240:55:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1222:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1222:74:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1222:74:16" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1146:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1157:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1168:4:16", - "type": "" - } - ], - "src": "1076:226:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1481:296:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1498:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1509:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1491:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1491:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1491:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1532:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1543:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1528:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1528:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1548:2:16", - "type": "", - "value": "66" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1521:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1521:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1521:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1571:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1582:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1567:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1567:18:16" - }, - { - "hexValue": "5472616e73706172656e745570677261646561626c6550726f78793a2061646d", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1587:34:16", - "type": "", - "value": "TransparentUpgradeableProxy: adm" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1560:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1560:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1560:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1642:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1653:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1638:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1638:18:16" - }, - { - "hexValue": "696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1658:34:16", - "type": "", - "value": "in cannot fallback to proxy targ" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1631:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1631:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1631:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1713:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1724:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1709:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1709:19:16" - }, - { - "hexValue": "6574", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1730:4:16", - "type": "", - "value": "et" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1702:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1702:33:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1702:33:16" - }, - { - "nodeType": "YulAssignment", - "src": "1744:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1756:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1767:3:16", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1752:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1752:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1744:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1458:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1472:4:16", - "type": "" - } - ], - "src": "1307:470:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1911:198:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1921:26:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1933:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1944:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1929:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1929:18:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1921:4:16" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1956:52:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1966:42:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1960:2:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2024:9:16" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2039:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2047:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2035:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2035:15:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2017:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2017:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2017:34:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2071:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2082:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2067:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2067:18:16" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2091:6:16" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2099:2:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2087:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2087:15:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2060:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2060:43:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2060:43:16" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1872:9:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1883:6:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1891:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1902:4:16", - "type": "" - } - ], - "src": "1782:327:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2288:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2305:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2316:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2298:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2298:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2298:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2339:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2350:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2335:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2335:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2355:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2328:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2328:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2328:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2378:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2389:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2374:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2374:18:16" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2394:34:16", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2367:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2367:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2367:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2449:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2460:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2445:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2445:18:16" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2465:8:16", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2438:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2438:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2438:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "2483:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2495:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2506:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2491:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2491:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2483:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2265:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2279:4:16", - "type": "" - } - ], - "src": "2114:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2574:205:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2584:10:16", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2593:1:16", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2588:1:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2653:63:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2678:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2683:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2674:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2674:11:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2697:3:16" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2702:1:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2693:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2693:11:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2687:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "2687:18:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2667:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2667:39:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2667:39:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2614:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2617:6:16" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2611:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "2611:13:16" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2625:19:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2627:15:16", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2636:1:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2639:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2632:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2632:10:16" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2627:1:16" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2607:3:16", - "statements": [] - }, - "src": "2603:113:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2742:31:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2755:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2760:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2751:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2751:16:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2769:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2744:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "2744:27:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2744:27:16" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2731:1:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2734:6:16" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2728:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "2728:13:16" - }, - "nodeType": "YulIf", - "src": "2725:48:16" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "2552:3:16", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "2557:3:16", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2562:6:16", - "type": "" - } - ], - "src": "2521:258:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2921:137:16", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2931:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2951:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2945:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "2945:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2935:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2993:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3001:4:16", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2989:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "2989:17:16" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3008:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3013:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "2967:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "2967:53:16" - }, - "nodeType": "YulExpressionStatement", - "src": "2967:53:16" - }, - { - "nodeType": "YulAssignment", - "src": "3029:23:16", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3040:3:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3045:6:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3036:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3036:16:16" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3029:3:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2897:3:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2902:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2913:3:16", - "type": "" - } - ], - "src": "2784:274:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3237:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3254:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3265:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3247:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3247:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3247:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3288:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3299:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3284:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3284:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3304:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3277:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3277:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3277:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3327:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3338:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3323:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3323:18:16" - }, - { - "hexValue": "455243313936373a206e65772061646d696e20697320746865207a65726f2061", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3343:34:16", - "type": "", - "value": "ERC1967: new admin is the zero a" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3316:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3316:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3316:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3398:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3409:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3394:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3394:18:16" - }, - { - "hexValue": "646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3414:8:16", - "type": "", - "value": "ddress" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3387:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3387:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3387:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "3432:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3444:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3455:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3440:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3440:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3432:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3214:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3228:4:16", - "type": "" - } - ], - "src": "3063:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3591:321:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3608:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3619:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3601:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3601:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3601:21:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3631:27:16", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3651:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3645:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "3645:13:16" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3635:6:16", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3678:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3689:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3674:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3674:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3694:6:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3667:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "3667:34:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3667:34:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3736:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3744:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3732:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3732:15:16" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3753:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3764:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3749:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3749:18:16" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3769:6:16" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3710:21:16" - }, - "nodeType": "YulFunctionCall", - "src": "3710:66:16" - }, - "nodeType": "YulExpressionStatement", - "src": "3710:66:16" - }, - { - "nodeType": "YulAssignment", - "src": "3785:121:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3801:9:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3820:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3828:2:16", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3816:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3816:15:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3833:66:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3812:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3812:88:16" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3797:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3797:104:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3903:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3793:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "3793:113:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3785:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3560:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3571:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3582:4:16", - "type": "" - } - ], - "src": "3470:442:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4091:235:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4108:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4119:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4101:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "4101:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4101:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4142:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4153:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4138:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4138:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4158:2:16", - "type": "", - "value": "45" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4131:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "4131:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4131:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4181:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4192:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4177:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4177:18:16" - }, - { - "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4197:34:16", - "type": "", - "value": "ERC1967: new implementation is n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4170:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "4170:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4170:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4252:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4263:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4248:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4248:18:16" - }, - { - "hexValue": "6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4268:15:16", - "type": "", - "value": "ot a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4241:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "4241:43:16" - }, - "nodeType": "YulExpressionStatement", - "src": "4241:43:16" - }, - { - "nodeType": "YulAssignment", - "src": "4293:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4305:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4316:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4301:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "4301:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4293:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4068:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4082:4:16", - "type": "" - } - ], - "src": "3917:409:16" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n value1 := add(_2, 32)\n value2 := length\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 66)\n mstore(add(headStart, 64), \"TransparentUpgradeableProxy: adm\")\n mstore(add(headStart, 96), \"in cannot fallback to proxy targ\")\n mstore(add(headStart, 128), \"et\")\n tail := add(headStart, 160)\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"ERC1967: new admin is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n }\n function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 45)\n mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n mstore(add(headStart, 96), \"ot a contract\")\n tail := add(headStart, 128)\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0xA8 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0xE6 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x106 JUMPI PUSH2 0x6D JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x75 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x95 JUMPI PUSH2 0x6D JUMP JUMPDEST CALLDATASIZE PUSH2 0x6D JUMPI PUSH2 0x6B PUSH2 0x11B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x6B PUSH2 0x11B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x91F JUMP JUMPDEST PUSH2 0x135 JUMP JUMPDEST PUSH2 0x6B PUSH2 0xA3 CALLDATASIZE PUSH1 0x4 PUSH2 0x93A JUMP JUMPDEST PUSH2 0x196 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBD PUSH2 0x221 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B PUSH2 0x101 CALLDATASIZE PUSH1 0x4 PUSH2 0x91F JUMP JUMPDEST PUSH2 0x276 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x112 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBD PUSH2 0x2BA JUMP JUMPDEST PUSH2 0x123 PUSH2 0x347 JUMP JUMPDEST PUSH2 0x133 PUSH2 0x12E PUSH2 0x435 JUMP JUMPDEST PUSH2 0x43F JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x13D PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x18E JUMPI PUSH2 0x18B DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x4A3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x18B PUSH2 0x11B JUMP JUMPDEST PUSH2 0x19E PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x219 JUMPI PUSH2 0x214 DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x4A3 SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x214 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22B PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x26B JUMPI PUSH2 0x266 PUSH2 0x435 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x273 PUSH2 0x11B JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x27E PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x18E JUMPI PUSH2 0x18B DUP2 PUSH2 0x4CE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C4 PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x26B JUMPI PUSH2 0x266 PUSH2 0x463 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x324 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xA57 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x52F JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x34F PUSH2 0x463 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x133 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x42 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x6574000000000000000000000000000000000000000000000000000000000000 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x266 PUSH2 0x657 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x45E JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4AC DUP4 PUSH2 0x67F JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x4B9 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x214 JUMPI PUSH2 0x4C8 DUP4 DUP4 PUSH2 0x2FF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x4F7 PUSH2 0x463 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x18B DUP2 PUSH2 0x6CC JUMP JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x5D5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x42C JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x5FD SWAP2 SWAP1 PUSH2 0x9E9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x638 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x63D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x64D DUP3 DUP3 DUP7 PUSH2 0x7D8 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x487 JUMP JUMPDEST PUSH2 0x688 DUP2 PUSH2 0x82B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x76F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x42C JUMP JUMPDEST DUP1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x7E7 JUMPI POP DUP2 PUSH2 0x324 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x7F7 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x42C SWAP2 SWAP1 PUSH2 0xA05 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x8CF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74206120636F6E747261637400000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x42C JUMP JUMPDEST DUP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x792 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x91A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x324 DUP3 PUSH2 0x8F6 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x94F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x958 DUP5 PUSH2 0x8F6 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x975 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x989 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x998 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x9AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9D8 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9C0 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x4C8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x9FB DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x9BD JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xA24 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x9BD JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH10 0x70667358221220B29CAA SLOAD CALLER PUSH12 0x3EE836679675E9732EC5E526 0xFB EXTCODEHASH DUP1 EXTCODECOPY 0xCA 0x2F 0xE3 CALLDATASIZE 0xCC CALLDATALOAD SSTORE 0xAB 0xA6 0x22 PUSH5 0x736F6C6343 STOP ADDMOD EXP STOP CALLER ", - "sourceMap": "1634:3556:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2903:11:4;:9;:11::i;:::-;1634:3556:9;;2680:11:4;:9;:11::i;4032:134:9:-;;;;;;;;;;-1:-1:-1;4032:134:9;;;;;:::i;:::-;;:::i;4542:164::-;;;;;;:::i;:::-;;:::i;3435:129::-;;;;;;;;;;;;;:::i;:::-;;;1252:42:16;1240:55;;;1222:74;;1210:2;1195:18;3435:129:9;;;;;;;3769:103;;;;;;;;;;-1:-1:-1;3769:103:9;;;;;:::i;:::-;;:::i;2879:96::-;;;;;;;;;;;;;:::i;2327:110:4:-;2375:17;:15;:17::i;:::-;2402:28;2412:17;:15;:17::i;:::-;2402:9;:28::i;:::-;2327:110::o;4032:134:9:-;2350:11;:9;:11::i;:::-;2336:25;;:10;:25;;;2332:99;;;4105:54:::1;4123:17;4142:9;;;;;;;;;;;::::0;4153:5:::1;4105:17;:54::i;:::-;4032:134:::0;:::o;2332:99::-;2409:11;:9;:11::i;4542:164::-;2350:11;:9;:11::i;:::-;2336:25;;:10;:25;;;2332:99;;;4651:48:::1;4669:17;4688:4;;4651:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4694:4:9::1;::::0;-1:-1:-1;4651:17:9::1;::::0;-1:-1:-1;;4651:48:9:i:1;:::-;4542:164:::0;;;:::o;2332:99::-;2409:11;:9;:11::i;3435:129::-;3487:23;2350:11;:9;:11::i;:::-;2336:25;;:10;:25;;;2332:99;;;3540:17:::1;:15;:17::i;:::-;3522:35;;3435:129:::0;:::o;2332:99::-;2409:11;:9;:11::i;:::-;3435:129;:::o;3769:103::-;2350:11;:9;:11::i;:::-;2336:25;;:10;:25;;;2332:99;;;3843:22:::1;3856:8;3843:12;:22::i;2879:96::-:0;2922:14;2350:11;:9;:11::i;:::-;2336:25;;:10;:25;;;2332:99;;;2957:11:::1;:9;:11::i;6575:198:12:-:0;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:12:o;1180:320::-;1470:19;;;:23;;;1180:320::o;4981:207:9:-;5066:11;:9;:11::i;:::-;5052:25;;:10;:25;;;;5044:104;;;;;;;1509:2:16;5044:104:9;;;1491:21:16;1548:2;1528:18;;;1521:30;1587:34;1567:18;;;1560:62;1658:34;1638:18;;;1631:62;1730:4;1709:19;;;1702:33;1752:19;;5044:104:9;;;;;;;;1240:140:2;1307:12;1338:35;:33;:35::i;953:895:4:-;1291:14;1288:1;1285;1272:34;1505:1;1502;1486:14;1483:1;1467:14;1460:5;1447:60;1581:16;1578:1;1575;1560:38;1619:6;1686:66;;;;1801:16;1798:1;1791:27;1686:66;1721:16;1718:1;1711:27;4113:130:3;4165:7;3847:66;4191:39;:45;;;;4113:130;-1:-1:-1;4113:130:3:o;2188:295::-;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;:53::i;:::-;;2188:295;;;:::o;4637:135::-;4701:35;4714:11;:9;:11::i;:::-;4701:35;;;1966:42:16;2035:15;;;2017:34;;2087:15;;;2082:2;2067:18;;2060:43;1929:18;4701:35:3;;;;;;;4746:19;4756:8;4746:9;:19::i;6959:387:12:-;7100:12;1470:19;;;;7124:69;;;;;;;2316:2:16;7124:69:12;;;2298:21:16;2355:2;2335:18;;;2328:30;2394:34;2374:18;;;2367:62;2465:8;2445:18;;;2438:36;2491:19;;7124:69:12;2114:402:16;7124:69:12;7205:12;7219:23;7246:6;:19;;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7204:67;;;;7288:51;7305:7;7314:10;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:12:o;1306:140:3:-;1359:7;1035:66;1385:48;1599:147:14;1902:152:3;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;;;;;;;;;;1902:152;:::o;4325:201::-;4388:22;;;4380:73;;;;;;;3265:2:16;4380:73:3;;;3247:21:16;3304:2;3284:18;;;3277:30;3343:34;3323:18;;;3316:62;3414:8;3394:18;;;3387:36;3440:19;;4380:73:3;3063:402:16;4380:73:3;4511:8;3847:66;4463:39;:56;;;;;;;;;;;;;;;-1:-1:-1;4325:201:3:o;7566:692:12:-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:12;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;;;;;;;;;;:::i;1537:259:3:-;1470:19:12;;;;1610:95:3;;;;;;;4119:2:16;1610:95:3;;;4101:21:16;4158:2;4138:18;;;4131:30;4197:34;4177:18;;;4170:62;4268:15;4248:18;;;4241:43;4301:19;;1610:95:3;3917:409:16;1610:95:3;1772:17;1035:66;1715:48;1599:147:14;14:196:16;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;406:665::-;485:6;493;501;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;593:29;612:9;593:29;:::i;:::-;583:39;;673:2;662:9;658:18;645:32;696:18;737:2;729:6;726:14;723:34;;;753:1;750;743:12;723:34;791:6;780:9;776:22;766:32;;836:7;829:4;825:2;821:13;817:27;807:55;;858:1;855;848:12;807:55;898:2;885:16;924:2;916:6;913:14;910:34;;;940:1;937;930:12;910:34;985:7;980:2;971:6;967:2;963:15;959:24;956:37;953:57;;;1006:1;1003;996:12;953:57;1037:2;1033;1029:11;1019:21;;1059:6;1049:16;;;;;406:665;;;;;:::o;2521:258::-;2593:1;2603:113;2617:6;2614:1;2611:13;2603:113;;;2693:11;;;2687:18;2674:11;;;2667:39;2639:2;2632:10;2603:113;;;2734:6;2731:1;2728:13;2725:48;;;-1:-1:-1;;2769:1:16;2751:16;;2744:27;2521:258::o;2784:274::-;2913:3;2951:6;2945:13;2967:53;3013:6;3008:3;3001:4;2993:6;2989:17;2967:53;:::i;:::-;3036:16;;;;;2784:274;-1:-1:-1;;2784:274:16:o;3470:442::-;3619:2;3608:9;3601:21;3582:4;3651:6;3645:13;3694:6;3689:2;3678:9;3674:18;3667:34;3710:66;3769:6;3764:2;3753:9;3749:18;3744:2;3736:6;3732:15;3710:66;:::i;:::-;3828:2;3816:15;3833:66;3812:88;3797:104;;;;3903:2;3793:113;;3470:442;-1:-1:-1;;3470:442:16:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "547800", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite", - "admin()": "infinite", - "changeAdmin(address)": "infinite", - "implementation()": "infinite", - "upgradeTo(address)": "infinite", - "upgradeToAndCall(address,bytes)": "infinite" - }, - "internal": { - "_admin()": "infinite", - "_beforeFallback()": "infinite" - } - }, - "methodIdentifiers": { - "admin()": "f851a440", - "changeAdmin(address)": "8f283970", - "implementation()": "5c60da1b", - "upgradeTo(address)": "3659cfe6", - "upgradeToAndCall(address,bytes)": "4f1ef286" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/UUPSUpgradeable.json b/extendedArtifacts/UUPSUpgradeable.json deleted file mode 100644 index bbac08a..0000000 --- a/extendedArtifacts/UUPSUpgradeable.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "contractName": "UUPSUpgradeable", - "sourceName": "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing `UUPSUpgradeable` with a custom implementation of upgrades. The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. _Available since v4.1._", - "kind": "dev", - "methods": { - "proxiableUUID()": { - "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." - } - }, - "stateVariables": { - "__self": { - "custom:oz-upgrades-unsafe-allow": "state-variable-immutable state-variable-assignment" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "proxiableUUID()": "52d1902d", - "upgradeTo(address)": "3659cfe6", - "upgradeToAndCall(address,bytes)": "4f1ef286" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing `UUPSUpgradeable` with a custom implementation of upgrades. The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. _Available since v4.1._\",\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"stateVariables\":{\"__self\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable state-variable-assignment\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\":\"UUPSUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\",\"keccak256\":\"0xef60022354b52f65a38d41d247a9bd6d57042aaf3ab6f93f4645f2df8210e88c\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/UpgradeableBeacon.json b/extendedArtifacts/UpgradeableBeacon.json deleted file mode 100644 index 7192561..0000000 --- a/extendedArtifacts/UpgradeableBeacon.json +++ /dev/null @@ -1,1969 +0,0 @@ -{ - "contractName": "UpgradeableBeacon", - "sourceName": "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - }, - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5060405161072e38038061072e83398101604081905261002f91610170565b806100398161004a565b506100438261009a565b50506101a3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6100ad8161014560201b61038d1760201c565b6101235760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03163b151590565b80516001600160a01b038116811461016b57600080fd5b919050565b6000806040838503121561018357600080fd5b61018c83610154565b915061019a60208401610154565b90509250929050565b61057c806101b26000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063715018a611610050578063715018a6146100c45780638da5cb5b146100cc578063f2fde38b146100ea57600080fd5b80633659cfe61461006c5780635c60da1b14610081575b600080fd5b61007f61007a366004610509565b6100fd565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007f6101d0565b60005473ffffffffffffffffffffffffffffffffffffffff1661009b565b61007f6100f8366004610509565b61025d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61018c816103a9565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017a565b61025b6000610494565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017a565b73ffffffffffffffffffffffffffffffffffffffff8116610381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161017a565b61038a81610494565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff81163b61044d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840161017a565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561051b57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461053f57600080fd5b939250505056fea2646970667358221220b869e7d8d8cb8b2b781046fe11187e41a3435b96fb1bee6210683d06a0d93b1464736f6c634300080a0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c8063715018a611610050578063715018a6146100c45780638da5cb5b146100cc578063f2fde38b146100ea57600080fd5b80633659cfe61461006c5780635c60da1b14610081575b600080fd5b61007f61007a366004610509565b6100fd565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61007f6101d0565b60005473ffffffffffffffffffffffffffffffffffffffff1661009b565b61007f6100f8366004610509565b61025d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61018c816103a9565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017a565b61025b6000610494565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017a565b73ffffffffffffffffffffffffffffffffffffffff8116610381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161017a565b61038a81610494565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff81163b61044d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840161017a565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561051b57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461053f57600080fd5b939250505056fea2646970667358221220b869e7d8d8cb8b2b781046fe11187e41a3435b96fb1bee6210683d06a0d93b1464736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their implementation contract, which is where they will delegate all function calls. An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.", - "events": { - "Upgraded(address)": { - "details": "Emitted when the implementation returned by the beacon is changed." - } - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the beacon." - }, - "implementation()": { - "details": "Returns the current implementation address." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "upgradeTo(address)": { - "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_24": { - "entryPoint": null, - "id": 24, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_663": { - "entryPoint": null, - "id": 663, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setImplementation_709": { - "entryPoint": 154, - "id": 709, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_transferOwnership_104": { - "entryPoint": 74, - "id": 104, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@isContract_1227": { - "entryPoint": 325, - "id": 1227, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 340, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address_fromMemory": { - "entryPoint": 368, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:911:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:117:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "84:22:16", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "99:6:16" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "93:5:16" - }, - "nodeType": "YulFunctionCall", - "src": "93:13:16" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "84:5:16" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "169:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "178:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "181:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "171:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "171:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "171:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "128:5:16" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "139:5:16" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "154:3:16", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "159:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "150:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "150:11:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "163:1:16", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "146:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "146:19:16" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "135:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "135:31:16" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "125:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "125:42:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "118:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "118:50:16" - }, - "nodeType": "YulIf", - "src": "115:70:16" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:16", - "type": "" - } - ], - "src": "14:177:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "294:195:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "340:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "349:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "352:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "342:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "342:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "342:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "315:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "324:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "311:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "311:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "336:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "307:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "307:32:16" - }, - "nodeType": "YulIf", - "src": "304:52:16" - }, - { - "nodeType": "YulAssignment", - "src": "365:50:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "405:9:16" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "375:29:16" - }, - "nodeType": "YulFunctionCall", - "src": "375:40:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "365:6:16" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "424:59:16", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "468:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "479:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "464:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "464:18:16" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "434:29:16" - }, - "nodeType": "YulFunctionCall", - "src": "434:49:16" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "424:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "252:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "263:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "275:6:16", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "283:6:16", - "type": "" - } - ], - "src": "196:293:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "668:241:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "685:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "696:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "678:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "678:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "678:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "719:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "730:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "715:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "715:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "735:2:16", - "type": "", - "value": "51" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "708:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "708:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "708:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "758:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "769:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "754:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "754:18:16" - }, - { - "hexValue": "5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "774:34:16", - "type": "", - "value": "UpgradeableBeacon: implementatio" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "747:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "747:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "747:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "829:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "840:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "825:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "825:18:16" - }, - { - "hexValue": "6e206973206e6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "845:21:16", - "type": "", - "value": "n is not a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "818:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "818:49:16" - }, - "nodeType": "YulExpressionStatement", - "src": "818:49:16" - }, - { - "nodeType": "YulAssignment", - "src": "876:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "888:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "899:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "884:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "884:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "876:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "645:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "659:4:16", - "type": "" - } - ], - "src": "494:415:16" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 51)\n mstore(add(headStart, 64), \"UpgradeableBeacon: implementatio\")\n mstore(add(headStart, 96), \"n is not a contract\")\n tail := add(headStart, 128)\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x72E CODESIZE SUB DUP1 PUSH2 0x72E DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x170 JUMP JUMPDEST DUP1 PUSH2 0x39 DUP2 PUSH2 0x4A JUMP JUMPDEST POP PUSH2 0x43 DUP3 PUSH2 0x9A JUMP JUMPDEST POP POP PUSH2 0x1A3 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0xAD DUP2 PUSH2 0x145 PUSH1 0x20 SHL PUSH2 0x38D OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x123 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x33 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E206973206E6F74206120636F6E747261637400000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x16B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x18C DUP4 PUSH2 0x154 JUMP JUMPDEST SWAP2 POP PUSH2 0x19A PUSH1 0x20 DUP5 ADD PUSH2 0x154 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x57C DUP1 PUSH2 0x1B2 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xC4 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x509 JUMP JUMPDEST PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x7F PUSH2 0x1D0 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9B JUMP JUMPDEST PUSH2 0x7F PUSH2 0xF8 CALLDATASIZE PUSH1 0x4 PUSH2 0x509 JUMP JUMPDEST PUSH2 0x25D JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x183 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x18C DUP2 PUSH2 0x3A9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x251 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x17A JUMP JUMPDEST PUSH2 0x25B PUSH1 0x0 PUSH2 0x494 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2DE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x17A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x381 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17A JUMP JUMPDEST PUSH2 0x38A DUP2 PUSH2 0x494 JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x44D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x33 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E206973206E6F74206120636F6E747261637400000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x53F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 PUSH10 0xE7D8D8CB8B2B781046FE GT XOR PUSH31 0x41A3435B96FB1BEE6210683D06A0D93B1464736F6C634300080A0033000000 ", - "sourceMap": "543:1541:7:-:0;;;932:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;999:12;942:32:0;999:12:7;942:18:0;:32::i;:::-;-1:-1:-1;1023:35:7::1;1042:15:::0;1023:18:::1;:35::i;:::-;932:133:::0;;543:1541;;2291:187:0;2364:16;2383:6;;-1:-1:-1;;;;;2399:17:0;;;-1:-1:-1;;;;;;2399:17:0;;;;;;2431:40;;2383:6;;;;;;;2431:40;;2364:16;2431:40;2354:124;2291:187;:::o;1856:226:7:-;1937:37;1956:17;1937:18;;;;;:37;;:::i;:::-;1929:101;;;;-1:-1:-1;;;1929:101:7;;696:2:16;1929:101:7;;;678:21:16;735:2;715:18;;;708:30;774:34;754:18;;;747:62;845:21;825:18;;;818:49;884:19;;1929:101:7;;;;;;;;2040:15;:35;;-1:-1:-1;;;;;;2040:35:7;-1:-1:-1;;;;;2040:35:7;;;;;;;;;;1856:226::o;1180:320:12:-;-1:-1:-1;;;;;1470:19:12;;:23;;;1180:320::o;14:177:16:-;93:13;;-1:-1:-1;;;;;135:31:16;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;494:415::-;543:1541:7;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_msgSender_1516": { - "entryPoint": null, - "id": 1516, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_709": { - "entryPoint": 937, - "id": 709, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_transferOwnership_104": { - "entryPoint": 1172, - "id": 104, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@implementation_673": { - "entryPoint": null, - "id": 673, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@isContract_1227": { - "entryPoint": 909, - "id": 1227, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@owner_33": { - "entryPoint": null, - "id": 33, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@renounceOwnership_61": { - "entryPoint": 464, - "id": 61, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@transferOwnership_84": { - "entryPoint": 605, - "id": 84, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@upgradeTo_690": { - "entryPoint": 253, - "id": 690, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 1289, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1744:16", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:16", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "84:239:16", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "130:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "139:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "142:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "132:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "132:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "132:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "105:7:16" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "114:9:16" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "101:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "101:23:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "126:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "97:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "97:32:16" - }, - "nodeType": "YulIf", - "src": "94:52:16" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "155:36:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "181:9:16" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "168:12:16" - }, - "nodeType": "YulFunctionCall", - "src": "168:23:16" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "159:5:16", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "277:16:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "286:1:16", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "289:1:16", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "279:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "279:12:16" - }, - "nodeType": "YulExpressionStatement", - "src": "279:12:16" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "213:5:16" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "224:5:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "231:42:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "220:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "220:54:16" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "210:2:16" - }, - "nodeType": "YulFunctionCall", - "src": "210:65:16" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "203:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "203:73:16" - }, - "nodeType": "YulIf", - "src": "200:93:16" - }, - { - "nodeType": "YulAssignment", - "src": "302:15:16", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "312:5:16" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "302:6:16" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "50:9:16", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "61:7:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "73:6:16", - "type": "" - } - ], - "src": "14:309:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "429:125:16", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "439:26:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "451:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "462:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "447:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "447:18:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "439:4:16" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "481:9:16" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "496:6:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "504:42:16", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "492:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "492:55:16" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "474:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "474:74:16" - }, - "nodeType": "YulExpressionStatement", - "src": "474:74:16" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "398:9:16", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "409:6:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "420:4:16", - "type": "" - } - ], - "src": "328:226:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "733:182:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "750:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "761:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "743:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "743:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "743:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "784:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "795:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "780:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "780:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "800:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "773:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "773:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "773:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "823:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "834:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "819:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "819:18:16" - }, - { - "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "839:34:16", - "type": "", - "value": "Ownable: caller is not the owner" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "812:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "812:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "812:62:16" - }, - { - "nodeType": "YulAssignment", - "src": "883:26:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "895:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "906:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "891:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "891:18:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "883:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "710:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "724:4:16", - "type": "" - } - ], - "src": "559:356:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1094:228:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1111:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1122:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1104:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1104:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1104:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1145:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1156:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1141:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1141:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1161:2:16", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1134:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1134:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1134:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1184:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1195:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1180:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1180:18:16" - }, - { - "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1200:34:16", - "type": "", - "value": "Ownable: new owner is the zero a" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1173:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1173:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1173:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1255:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1266:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1251:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1251:18:16" - }, - { - "hexValue": "646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1271:8:16", - "type": "", - "value": "ddress" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1244:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1244:36:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1244:36:16" - }, - { - "nodeType": "YulAssignment", - "src": "1289:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1301:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1312:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1297:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1297:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1289:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1071:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1085:4:16", - "type": "" - } - ], - "src": "920:402:16" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1501:241:16", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1518:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1529:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1511:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1511:21:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1511:21:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1552:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1563:2:16", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1548:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1548:18:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1568:2:16", - "type": "", - "value": "51" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1541:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1541:30:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1541:30:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1591:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1602:2:16", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1587:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1587:18:16" - }, - { - "hexValue": "5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1607:34:16", - "type": "", - "value": "UpgradeableBeacon: implementatio" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1580:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1580:62:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1580:62:16" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1662:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1673:2:16", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1658:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1658:18:16" - }, - { - "hexValue": "6e206973206e6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1678:21:16", - "type": "", - "value": "n is not a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1651:6:16" - }, - "nodeType": "YulFunctionCall", - "src": "1651:49:16" - }, - "nodeType": "YulExpressionStatement", - "src": "1651:49:16" - }, - { - "nodeType": "YulAssignment", - "src": "1709:27:16", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1721:9:16" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1732:3:16", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1717:3:16" - }, - "nodeType": "YulFunctionCall", - "src": "1717:19:16" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1709:4:16" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1478:9:16", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1492:4:16", - "type": "" - } - ], - "src": "1327:415:16" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 51)\n mstore(add(headStart, 64), \"UpgradeableBeacon: implementatio\")\n mstore(add(headStart, 96), \"n is not a contract\")\n tail := add(headStart, 128)\n }\n}", - "id": 16, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x67 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x50 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xC4 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x6C JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x7F PUSH2 0x7A CALLDATASIZE PUSH1 0x4 PUSH2 0x509 JUMP JUMPDEST PUSH2 0xFD JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x7F PUSH2 0x1D0 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x9B JUMP JUMPDEST PUSH2 0x7F PUSH2 0xF8 CALLDATASIZE PUSH1 0x4 PUSH2 0x509 JUMP JUMPDEST PUSH2 0x25D JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x183 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x18C DUP2 PUSH2 0x3A9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x251 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x17A JUMP JUMPDEST PUSH2 0x25B PUSH1 0x0 PUSH2 0x494 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2DE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x17A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x381 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17A JUMP JUMPDEST PUSH2 0x38A DUP2 PUSH2 0x494 JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x44D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x33 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E206973206E6F74206120636F6E747261637400000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17A JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x53F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB8 PUSH10 0xE7D8D8CB8B2B781046FE GT XOR PUSH31 0x41A3435B96FB1BEE6210683D06A0D93B1464736F6C634300080A0033000000 ", - "sourceMap": "543:1541:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1514:167;;;;;;:::i;:::-;;:::i;:::-;;1143:112;1233:15;;;;1143:112;;;504:42:16;492:55;;;474:74;;462:2;447:18;1143:112:7;;;;;;;1689:101:0;;;:::i;1057:85::-;1103:7;1129:6;;;1057:85;;1939:198;;;;;;:::i;:::-;;:::i;1514:167:7:-;1103:7:0;1129:6;1269:23;1129:6;719:10:13;1269:23:0;1261:68;;;;;;;761:2:16;1261:68:0;;;743:21:16;;;780:18;;;773:30;839:34;819:18;;;812:62;891:18;;1261:68:0;;;;;;;;;1595:37:7::1;1614:17;1595:18;:37::i;:::-;1647:27;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;1514:167:::0;:::o;1689:101:0:-;1103:7;1129:6;1269:23;1129:6;719:10:13;1269:23:0;1261:68;;;;;;;761:2:16;1261:68:0;;;743:21:16;;;780:18;;;773:30;839:34;819:18;;;812:62;891:18;;1261:68:0;559:356:16;1261:68:0;1753:30:::1;1780:1;1753:18;:30::i;:::-;1689:101::o:0;1939:198::-;1103:7;1129:6;1269:23;1129:6;719:10:13;1269:23:0;1261:68;;;;;;;761:2:16;1261:68:0;;;743:21:16;;;780:18;;;773:30;839:34;819:18;;;812:62;891:18;;1261:68:0;559:356:16;1261:68:0;2027:22:::1;::::0;::::1;2019:73;;;::::0;::::1;::::0;;1122:2:16;2019:73:0::1;::::0;::::1;1104:21:16::0;1161:2;1141:18;;;1134:30;1200:34;1180:18;;;1173:62;1271:8;1251:18;;;1244:36;1297:19;;2019:73:0::1;920:402:16::0;2019:73:0::1;2102:28;2121:8;2102:18;:28::i;:::-;1939:198:::0;:::o;1180:320:12:-;1470:19;;;:23;;;1180:320::o;1856:226:7:-;1470:19:12;;;;1929:101:7;;;;;;;1529:2:16;1929:101:7;;;1511:21:16;1568:2;1548:18;;;1541:30;1607:34;1587:18;;;1580:62;1678:21;1658:18;;;1651:49;1717:19;;1929:101:7;1327:415:16;1929:101:7;2040:15;:35;;;;;;;;;;;;;;;1856:226::o;2291:187:0:-;2364:16;2383:6;;;2399:17;;;;;;;;;;2431:40;;2383:6;;;;;;;2431:40;;2364:16;2431:40;2354:124;2291:187;:::o;14:309:16:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;231:42;224:5;220:54;213:5;210:65;200:93;;289:1;286;279:12;200:93;312:5;14:309;-1:-1:-1;;;14:309:16:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "280800", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "implementation()": "2307", - "owner()": "2317", - "renounceOwnership()": "28075", - "transferOwnership(address)": "28255", - "upgradeTo(address)": "30433" - }, - "internal": { - "_setImplementation(address)": "infinite" - } - }, - "methodIdentifiers": { - "implementation()": "5c60da1b", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b", - "upgradeTo(address)": "3659cfe6" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their implementation contract, which is where they will delegate all function calls. An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\",\"events\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation returned by the beacon is changed.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the beacon.\"},\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\":\"UpgradeableBeacon\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0x740c7bfd168fb30daeefc3193f5a5482531669f02430e29d46c2734a9ceb511f\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 7, - "contract": "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol:UpgradeableBeacon", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 642, - "contract": "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol:UpgradeableBeacon", - "label": "_implementation", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c" -} \ No newline at end of file diff --git a/extendedArtifacts/UsingDiamondOwner.json b/extendedArtifacts/UsingDiamondOwner.json deleted file mode 100644 index 1e7ce8e..0000000 --- a/extendedArtifacts/UsingDiamondOwner.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "contractName": "UsingDiamondOwner", - "sourceName": "solc_0.8/diamond/UsingDiamondOwner.sol", - "abi": [], - "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea26469706673582212201781c1c303d6698735758b3d6bb58946b5b1b35218c4148585cb34559b4cb37464736f6c634300080a0033", - "deployedBytecode": "0x6080604052600080fdfea26469706673582212201781c1c303d6698735758b3d6bb58946b5b1b35218c4148585cb34559b4cb37464736f6c634300080a0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3F DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR DUP2 0xC1 0xC3 SUB 0xD6 PUSH10 0x8735758B3D6BB58946B5 0xB1 0xB3 MSTORE XOR 0xC4 EQ DUP6 DUP6 0xCB CALLVALUE SSTORE SWAP12 0x4C 0xB3 PUSH21 0x64736F6C634300080A003300000000000000000000 ", - "sourceMap": "95:247:1:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR DUP2 0xC1 0xC3 SUB 0xD6 PUSH10 0x8735758B3D6BB58946B5 0xB1 0xB3 MSTORE XOR 0xC4 EQ DUP6 DUP6 0xCB CALLVALUE SSTORE SWAP12 0x4C 0xB3 PUSH21 0x64736F6C634300080A003300000000000000000000 ", - "sourceMap": "95:247:1:-:0;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "12600", - "executionCost": "66", - "totalCost": "12666" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/UsingDiamondOwner.sol\":\"UsingDiamondOwner\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/UsingDiamondOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x610145c6957708608f3d2c2626dbf3461f2886b0b304c2bdc0c332df981b82f8\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9" -} \ No newline at end of file diff --git a/extendedArtifacts/index.ts b/extendedArtifacts/index.ts deleted file mode 100644 index 2cfcad3..0000000 --- a/extendedArtifacts/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -export { default as Diamond } from './Diamond.json'; -export { default as UsingDiamondOwner } from './UsingDiamondOwner.json'; -export { default as DiamondCutFacet } from './DiamondCutFacet.json'; -export { default as DiamondLoupeFacet } from './DiamondLoupeFacet.json'; -export { default as DiamondLoupeFacetWithoutSupportsInterface } from './DiamondLoupeFacetWithoutSupportsInterface.json'; -export { default as OwnershipFacet } from './OwnershipFacet.json'; -export { default as DiamondERC165Init } from './DiamondERC165Init.json'; -export { default as IDiamondCut } from './IDiamondCut.json'; -export { default as IDiamondLoupe } from './IDiamondLoupe.json'; -export { default as IERC165 } from './IERC165.json'; -export { default as IERC173 } from './IERC173.json'; -export { default as LibDiamond } from './LibDiamond.json'; -export { default as Ownable } from './Ownable.json'; -export { default as IERC1822Proxiable } from './IERC1822Proxiable.json'; -export { default as Clones } from './Clones.json'; -export { default as ERC1967Proxy } from './ERC1967Proxy.json'; -export { default as ERC1967Upgrade } from './ERC1967Upgrade.json'; -export { default as Proxy } from './Proxy.json'; -export { default as BeaconProxy } from './BeaconProxy.json'; -export { default as IBeacon } from './IBeacon.json'; -export { default as UpgradeableBeacon } from './UpgradeableBeacon.json'; -export { default as ProxyAdmin } from './ProxyAdmin.json'; -export { default as TransparentUpgradeableProxy } from './TransparentUpgradeableProxy.json'; -export { default as Initializable } from './Initializable.json'; -export { default as UUPSUpgradeable } from './UUPSUpgradeable.json'; -export { default as Address } from './Address.json'; -export { default as Context } from './Context.json'; -export { default as StorageSlot } from './StorageSlot.json'; -export { default as ERC165 } from './ERC165.json'; -export { default as ERC165Checker } from './ERC165Checker.json'; -export { default as ERC165Storage } from './ERC165Storage.json'; -export { default as EIP173Proxy } from './EIP173Proxy.json'; -export { default as EIP173ProxyWithReceive } from './EIP173ProxyWithReceive.json'; -export { default as OptimizedTransparentUpgradeableProxy } from './OptimizedTransparentUpgradeableProxy.json'; -export { default as Proxied } from './Proxied.json'; diff --git a/extendedArtifactsTron/Address.json b/extendedArtifactsTron/Address.json deleted file mode 100644 index fff4b07..0000000 --- a/extendedArtifactsTron/Address.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "contractName": "Address", - "sourceName": "solc_0.8/openzeppelin/utils/Address.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26474726f6e5822122039334e0833e0415fb41787b04aabeb973c2ee65f1b6106afc311ea8a61713acc64736f6c634300080b0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26474726f6e5822122039334e0833e0415fb41787b04aabeb973c2ee65f1b6106afc311ea8a61713acc64736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Collection of functions related to the address type", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 CODECOPY CALLER 0x4E ADDMOD CALLER 0xE0 COINBASE 0x5F 0xB4 OR DUP8 0xB0 0x4A 0xAB 0xEB SWAP8 EXTCODECOPY 0x2E 0xE6 0x5F SHL PUSH2 0x6AF 0xC3 GT 0xEA DUP11 PUSH2 0x713A 0xCC PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", - "sourceMap": "199:8061:25:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;199:8061:25;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 CODECOPY CALLER 0x4E ADDMOD CALLER 0xE0 COINBASE 0x5F 0xB4 OR DUP8 0xB0 0x4A 0xAB 0xEB SWAP8 EXTCODECOPY 0x2E 0xE6 0x5F SHL PUSH2 0x6AF 0xC3 GT 0xEA DUP11 PUSH2 0x713A 0xCC PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", - "sourceMap": "199:8061:25:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "functionCall(address,bytes memory)": "infinite", - "functionCall(address,bytes memory,string memory)": "infinite", - "functionCallWithValue(address,bytes memory,uint256)": "infinite", - "functionCallWithValue(address,bytes memory,uint256,string memory)": "infinite", - "functionDelegateCall(address,bytes memory)": "infinite", - "functionDelegateCall(address,bytes memory,string memory)": "infinite", - "functionStaticCall(address,bytes memory)": "infinite", - "functionStaticCall(address,bytes memory,string memory)": "infinite", - "isContract(address)": "infinite", - "sendValue(address payable,uint256)": "infinite", - "verifyCallResult(bool,bytes memory,string memory)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/Address.sol\":\"Address\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/BeaconProxy.json b/extendedArtifactsTron/BeaconProxy.json deleted file mode 100644 index e9d9edb..0000000 --- a/extendedArtifactsTron/BeaconProxy.json +++ /dev/null @@ -1,4738 +0,0 @@ -{ - "contractName": "BeaconProxy", - "sourceName": "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405260405162000abe38038062000abe8339810160408190526200002691620004d3565b6200005360017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d51620005a1565b60008051602062000a7783398151915214620000735762000073620005c7565b620000818282600062000089565b50506200064e565b62000094836200015e565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a2600082511180620000d65750805b15620001595762000157836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001459190620005dd565b83620002ff60201b620000291760201c565b505b505050565b62000174816200032e60201b620000551760201c565b620001d45760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6200024e816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000217573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023d9190620005dd565b6200032e60201b620000551760201c565b620002b55760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401620001cb565b80620002de60008051602062000a7783398151915260001b6200033d60201b620000711760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b606062000327838360405180606001604052806027815260200162000a976027913962000340565b9392505050565b6001600160a01b03163b151590565b90565b60606001600160a01b0384163b620003aa5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001cb565b600080856001600160a01b031685604051620003c79190620005fb565b600060405180830381855af49150503d806000811462000404576040519150601f19603f3d011682016040523d82523d6000602084013e62000409565b606091505b5090925090506200041c82828662000426565b9695505050505050565b606083156200043757508162000327565b825115620004485782518084602001fd5b8160405162461bcd60e51b8152600401620001cb919062000619565b80516000906001600160a81b03811681146200047f57600080fd5b6001600160a01b031692915050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004c1578181015183820152602001620004a7565b83811115620001575750506000910152565b60008060408385031215620004e757600080fd5b620004f28362000464565b60208401519092506001600160401b03808211156200051057600080fd5b818501915085601f8301126200052557600080fd5b8151818111156200053a576200053a6200048e565b604051601f8201601f19908116603f011681019083821181831017156200056557620005656200048e565b816040528281528860208487010111156200057f57600080fd5b62000592836020830160208801620004a4565b80955050505050509250929050565b600082821015620005c257634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b600060208284031215620005f057600080fd5b620003278262000464565b600082516200060f818460208701620004a4565b9190910192915050565b60208152600082518060208401526200063a816040850160208701620004a4565b601f01601f19169190910160400192915050565b610419806200065e6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610074565b610127565b565b606061004e83836040518060600160405280602781526020016103bd6027913961014b565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012291906102cb565b905090565b3660008037600080366000845af43d6000803e808015610146573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b6101f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161021e919061034f565b600060405180830381855af49150503d8060008114610259576040519150601f19603f3d011682016040523d82523d6000602084013e61025e565b606091505b509150915061026e828286610278565b9695505050505050565b6060831561028757508161004e565b8251156102975782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ed919061036b565b6000602082840312156102dd57600080fd5b815174ffffffffffffffffffffffffffffffffffffffffff8116811461030257600080fd5b73ffffffffffffffffffffffffffffffffffffffff169392505050565b60005b8381101561033a578181015183820152602001610322565b83811115610349576000848401525b50505050565b6000825161036181846020870161031f565b9190910192915050565b602081526000825180602084015261038a81604085016020870161031f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26474726f6e58221220085d6a08c22d68ff8943259918887c2981b253a56caf88e3d64637b62a0bb73364736f6c634300080b0033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", - "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b610127565b565b606061004e83836040518060600160405280602781526020016103bd6027913961014b565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d505473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061012291906102cb565b905090565b3660008037600080366000845af43d6000803e808015610146573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b6101f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161021e919061034f565b600060405180830381855af49150503d8060008114610259576040519150601f19603f3d011682016040523d82523d6000602084013e61025e565b606091505b509150915061026e828286610278565b9695505050505050565b6060831561028757508161004e565b8251156102975782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ed919061036b565b6000602082840312156102dd57600080fd5b815174ffffffffffffffffffffffffffffffffffffffffff8116811461030257600080fd5b73ffffffffffffffffffffffffffffffffffffffff169392505050565b60005b8381101561033a578181015183820152602001610322565b83811115610349576000848401525b50505050565b6000825161036181846020870161031f565b9190910192915050565b602081526000825180602084015261038a81604085016020870161031f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26474726f6e58221220085d6a08c22d68ff8943259918887c2981b253a56caf88e3d64637b62a0bb73364736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}. The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't conflict with the storage layout of the implementation behind the proxy. _Available since v3.4._", - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the proxy with `beacon`. If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor. Requirements: - `beacon` must be a contract with the interface {IBeacon}." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_2251": { - "entryPoint": null, - "id": 2251, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setBeacon_2119": { - "entryPoint": 350, - "id": 2119, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeBeaconToAndCall_2157": { - "entryPoint": 137, - "id": 2157, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@functionDelegateCall_3109": { - "entryPoint": 767, - "id": 3109, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_3144": { - "entryPoint": 832, - "id": 3144, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_3224": { - "entryPoint": 829, - "id": 3224, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_2899": { - "entryPoint": 814, - "id": 2899, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_3175": { - "entryPoint": 1062, - "id": 3175, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 1124, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 1501, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 1235, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 1531, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 1561, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 1441, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 1188, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x01": { - "entryPoint": 1479, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1166, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4091:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:178:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "84:28:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "105:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "99:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "99:13:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "88:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "179:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "188:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "191:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "181:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "181:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "181:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "134:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "147:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "164:3:37", - "type": "", - "value": "168" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "169:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "160:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "160:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "173:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "156:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "156:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "143:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "143:33:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "131:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "131:46:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "124:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "124:54:37" - }, - "nodeType": "YulIf", - "src": "121:74:37" - }, - { - "nodeType": "YulAssignment", - "src": "204:42:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "217:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "234:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "239:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "230:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "230:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "226:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "226:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "213:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "213:33:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "204:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:37", - "type": "" - } - ], - "src": "14:238:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "289:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "306:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "313:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "318:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "309:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "309:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "299:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "299:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "299:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "346:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "349:4:37", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "339:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "339:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "339:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "370:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "373:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "363:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "363:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "363:15:37" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "257:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "442:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "452:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "461:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "456:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "521:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "546:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "551:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "542:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "542:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "565:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "570:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "561:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "561:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "555:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "555:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "535:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "535:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "535:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "482:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "485:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "479:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "479:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "493:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "495:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "504:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "507:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "500:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "500:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "495:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "475:3:37", - "statements": [] - }, - "src": "471:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "623:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "628:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "619:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "619:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "637:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "612:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "612:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "612:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "599:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "602:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "596:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "596:13:37" - }, - "nodeType": "YulIf", - "src": "593:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "420:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "425:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "430:6:37", - "type": "" - } - ], - "src": "389:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "759:861:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "805:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "814:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "817:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "807:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "807:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "807:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "780:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "789:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "776:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "776:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "801:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "772:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "772:32:37" - }, - "nodeType": "YulIf", - "src": "769:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "830:50:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "870:9:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "840:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "840:40:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "830:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "889:39:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "913:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "924:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "909:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "909:18:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "903:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "903:25:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "893:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "937:28:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "955:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "959:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "951:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "951:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "963:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "947:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "947:18:37" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "941:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "992:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1001:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1004:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "994:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "994:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "994:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "980:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "988:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "977:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "977:14:37" - }, - "nodeType": "YulIf", - "src": "974:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1017:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1031:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1042:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1027:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1027:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1021:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1097:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1106:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1109:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1099:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1099:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1099:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1076:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1080:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1072:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1072:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1087:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1068:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1068:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1061:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1061:35:37" - }, - "nodeType": "YulIf", - "src": "1058:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1122:19:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1138:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1132:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1132:9:37" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1126:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1164:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1166:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1166:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1166:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1156:2:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1160:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1153:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1153:10:37" - }, - "nodeType": "YulIf", - "src": "1150:36:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1195:17:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1209:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1205:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1205:7:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1199:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1221:23:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1241:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1235:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1235:9:37" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1225:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1253:71:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1275:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1299:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1303:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1295:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1295:13:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1310:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1291:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1291:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1315:2:37", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1287:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1287:31:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1320:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1283:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1283:40:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1271:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1271:53:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1257:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1383:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1385:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1385:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1385:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1342:10:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1354:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1339:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1339:18:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1362:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1374:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1359:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1359:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1336:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1336:46:37" - }, - "nodeType": "YulIf", - "src": "1333:72:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1421:2:37", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1425:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1414:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1414:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1414:22:37" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1452:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1460:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1445:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1445:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1445:18:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1509:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1518:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1521:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1511:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1511:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1511:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1486:2:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1490:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1482:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1482:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1495:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1478:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1478:20:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1500:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1475:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1475:33:37" - }, - "nodeType": "YulIf", - "src": "1472:53:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1560:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1564:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1556:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1556:11:37" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1573:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1581:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1569:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1569:15:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1586:2:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1534:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "1534:55:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1534:55:37" - }, - { - "nodeType": "YulAssignment", - "src": "1598:16:37", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1608:6:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1598:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "717:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "728:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "740:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "748:6:37", - "type": "" - } - ], - "src": "652:968:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1674:173:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1704:111:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1725:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1732:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1737:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1728:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1728:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1718:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1718:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1718:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1769:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1772:4:37", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1762:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1762:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1762:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1797:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1800:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1790:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1790:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1790:15:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1690:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1693:1:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1687:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1687:8:37" - }, - "nodeType": "YulIf", - "src": "1684:131:37" - }, - { - "nodeType": "YulAssignment", - "src": "1824:17:37", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1836:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1839:1:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1832:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1832:9:37" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "1824:4:37" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "1656:1:37", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "1659:1:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "1665:4:37", - "type": "" - } - ], - "src": "1625:222:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1884:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1901:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1908:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1913:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1904:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1904:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1894:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1894:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1894:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1941:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1944:4:37", - "type": "", - "value": "0x01" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1934:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1934:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1934:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1965:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1968:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1958:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1958:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1958:15:37" - } - ] - }, - "name": "panic_error_0x01", - "nodeType": "YulFunctionDefinition", - "src": "1852:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2065:127:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2111:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2120:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2123:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2113:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2113:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2113:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2086:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2095:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2082:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2082:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2107:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2078:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2078:32:37" - }, - "nodeType": "YulIf", - "src": "2075:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "2136:50:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2176:9:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "2146:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "2146:40:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2136:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2031:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2042:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2054:6:37", - "type": "" - } - ], - "src": "1984:208:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2371:227:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2388:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2399:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2381:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2381:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2381:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2422:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2433:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2418:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2418:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2438:2:37", - "type": "", - "value": "37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2411:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2411:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2411:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2461:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2472:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2457:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2457:18:37" - }, - { - "hexValue": "455243313936373a206e657720626561636f6e206973206e6f74206120636f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2477:34:37", - "type": "", - "value": "ERC1967: new beacon is not a con" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2450:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2450:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2450:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2532:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2543:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2528:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2528:18:37" - }, - { - "hexValue": "7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2548:7:37", - "type": "", - "value": "tract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2521:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2521:35:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2521:35:37" - }, - { - "nodeType": "YulAssignment", - "src": "2565:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2577:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2588:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2573:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2573:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2565:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2348:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2362:4:37", - "type": "" - } - ], - "src": "2197:401:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2777:238:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2794:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2805:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2787:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2787:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2787:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2828:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2839:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2824:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2824:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2844:2:37", - "type": "", - "value": "48" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2817:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2817:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2817:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2867:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2878:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2863:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2863:18:37" - }, - { - "hexValue": "455243313936373a20626561636f6e20696d706c656d656e746174696f6e2069", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2883:34:37", - "type": "", - "value": "ERC1967: beacon implementation i" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2856:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2856:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2856:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2938:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2949:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2934:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2934:18:37" - }, - { - "hexValue": "73206e6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2954:18:37", - "type": "", - "value": "s not a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2927:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2927:46:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2927:46:37" - }, - { - "nodeType": "YulAssignment", - "src": "2982:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2994:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3005:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2990:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2990:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2982:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2754:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2768:4:37", - "type": "" - } - ], - "src": "2603:412:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3194:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3211:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3222:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3204:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3204:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3204:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3245:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3256:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3241:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3241:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3261:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3234:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3234:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3234:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3284:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3295:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3280:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3280:18:37" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3300:34:37", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3273:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3273:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3273:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3355:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3366:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3351:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3351:18:37" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3371:8:37", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3344:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3344:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3344:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "3389:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3401:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3412:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3397:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3397:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3389:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3171:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3185:4:37", - "type": "" - } - ], - "src": "3020:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3564:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3574:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3594:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3588:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3588:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3578:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3636:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3644:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3632:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3632:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3651:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3656:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3610:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "3610:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3610:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "3672:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3683:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3688:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3679:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3679:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3672:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3540:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3545:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3556:3:37", - "type": "" - } - ], - "src": "3427:274:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3827:262:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3844:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3855:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3837:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3837:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3837:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3867:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3887:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3881:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3881:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3871:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3914:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3925:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3910:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3910:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3930:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3903:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3903:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3903:34:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3972:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3980:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3968:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3968:15:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3989:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4000:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3985:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3985:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4005:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3946:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "3946:66:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3946:66:37" - }, - { - "nodeType": "YulAssignment", - "src": "4021:62:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4037:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4056:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4064:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4052:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4052:15:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4073:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "4069:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4069:7:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4048:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4048:29:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4033:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4033:45:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4080:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4029:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4029:54:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4021:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3796:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3807:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3818:4:37", - "type": "" - } - ], - "src": "3706:383:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n let value_1 := mload(offset)\n if iszero(eq(value_1, and(value_1, sub(shl(168, 1), 1)))) { revert(0, 0) }\n value := and(value_1, sub(shl(160, 1), 1))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n let offset := mload(add(headStart, 32))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value1 := memPtr\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n diff := sub(x, y)\n }\n function panic_error_0x01()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x01)\n revert(0, 0x24)\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n }\n function abi_encode_tuple_t_stringliteral_9589b7809634e4928033de18bb696e9af4ef71b703652af5245f2dbebf2f4470__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 37)\n mstore(add(headStart, 64), \"ERC1967: new beacon is not a con\")\n mstore(add(headStart, 96), \"tract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_f95fd1f5b5578816eb23f6ca0f2439b4b5e4094dc16e99c3b8e91603a83f93c8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 48)\n mstore(add(headStart, 64), \"ERC1967: beacon implementation i\")\n mstore(add(headStart, 96), \"s not a contract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xABE CODESIZE SUB DUP1 PUSH3 0xABE DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x4D3 JUMP JUMPDEST PUSH3 0x53 PUSH1 0x1 PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D51 PUSH3 0x5A1 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xA77 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0x73 JUMPI PUSH3 0x73 PUSH3 0x5C7 JUMP JUMPDEST PUSH3 0x81 DUP3 DUP3 PUSH1 0x0 PUSH3 0x89 JUMP JUMPDEST POP POP PUSH3 0x64E JUMP JUMPDEST PUSH3 0x94 DUP4 PUSH3 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0x1CF3B03A6CF19FA2BABA4DF148E9DCABEDEA7F8A5C07840E207E5C089BE95D3E SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH3 0xD6 JUMPI POP DUP1 JUMPDEST ISZERO PUSH3 0x159 JUMPI PUSH3 0x157 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x11F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x145 SWAP2 SWAP1 PUSH3 0x5DD JUMP JUMPDEST DUP4 PUSH3 0x2FF PUSH1 0x20 SHL PUSH3 0x29 OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH3 0x174 DUP2 PUSH3 0x32E PUSH1 0x20 SHL PUSH3 0x55 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1D4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720626561636F6E206973206E6F74206120636F6E PUSH1 0x44 DUP3 ADD MSTORE PUSH5 0x1D1C9858DD PUSH1 0xDA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x24E DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x217 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x23D SWAP2 SWAP1 PUSH3 0x5DD JUMP JUMPDEST PUSH3 0x32E PUSH1 0x20 SHL PUSH3 0x55 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x2B5 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x30 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A20626561636F6E20696D706C656D656E746174696F6E2069 PUSH1 0x44 DUP3 ADD MSTORE PUSH16 0x1CC81B9BDD08184818DBDB9D1C9858DD PUSH1 0x82 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x1CB JUMP JUMPDEST DUP1 PUSH3 0x2DE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xA77 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x33D PUSH1 0x20 SHL PUSH3 0x71 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 PUSH3 0x327 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0xA97 PUSH1 0x27 SWAP2 CODECOPY PUSH3 0x340 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH3 0x3AA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x1CB JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH3 0x3C7 SWAP2 SWAP1 PUSH3 0x5FB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x404 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x409 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH3 0x41C DUP3 DUP3 DUP7 PUSH3 0x426 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH3 0x437 JUMPI POP DUP2 PUSH3 0x327 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH3 0x448 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x1CB SWAP2 SWAP1 PUSH3 0x619 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x47F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x4C1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x4A7 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x157 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH3 0x4E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x4F2 DUP4 PUSH3 0x464 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x510 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x53A JUMPI PUSH3 0x53A PUSH3 0x48E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x565 JUMPI PUSH3 0x565 PUSH3 0x48E JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x57F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x592 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x4A4 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH3 0x5C2 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x5F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x327 DUP3 PUSH3 0x464 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x60F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x4A4 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH3 0x63A DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH3 0x4A4 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x419 DUP1 PUSH3 0x65E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x74 JUMP JUMPDEST PUSH2 0x127 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3BD PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x14B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB4 PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x122 SWAP2 SWAP1 PUSH2 0x2CB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x146 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x1F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x21E SWAP2 SWAP1 PUSH2 0x34F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x259 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x25E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x26E DUP3 DUP3 DUP7 PUSH2 0x278 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x287 JUMPI POP DUP2 PUSH2 0x4E JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x297 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1ED SWAP2 SWAP1 PUSH2 0x36B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x33A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x322 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x349 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x361 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x31F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x38A DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x31F JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH21 0x726F6E58221220085D6A08C22D68FF894325991888 PUSH29 0x2981B253A56CAF88E3D64637B62A0BB73364736F6C634300080B0033A3 CREATE 0xAD PUSH21 0xE5423AEBFD80D3EF4346578335A9A72AEAEE59FF6C 0xB3 PC 0x2B CALLDATALOAD SGT RETURNDATASIZE POP COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C65640000 ", - "sourceMap": "564:1606:18:-:0;;;1046:205;;;;;;;;;;;;;;;;;;:::i;:::-;1142:46;1187:1;1150:33;1142:46;:::i;:::-;-1:-1:-1;;;;;;;;;;;1118:71:18;1111:79;;;;:::i;:::-;1200:44;1224:6;1232:4;1238:5;1200:23;:44::i;:::-;1046:205;;564:1606;;6147:343:16;6283:21;6294:9;6283:10;:21::i;:::-;6319:25;;-1:-1:-1;;;;;6319:25:16;;;;;;;;6372:1;6358:4;:11;:15;:28;;;;6377:9;6358:28;6354:130;;;6402:71;6439:9;-1:-1:-1;;;;;6431:33:16;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6468:4;6402:28;;;;;:71;;:::i;:::-;;6354:130;6147:343;;;:::o;5507:337::-;5572:29;5591:9;5572:18;;;;;:29;;:::i;:::-;5564:79;;;;-1:-1:-1;;;5564:79:16;;2399:2:37;5564:79:16;;;2381:21:37;2438:2;2418:18;;;2411:30;2477:34;2457:18;;;2450:62;-1:-1:-1;;;2528:18:37;;;2521:35;2573:19;;5564:79:16;;;;;;;;;5661:55;5688:9;-1:-1:-1;;;;;5680:33:16;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5661:18;;;;;:55;;:::i;:::-;5653:116;;;;-1:-1:-1;;;5653:116:16;;2805:2:37;5653:116:16;;;2787:21:37;2844:2;2824:18;;;2817:30;2883:34;2863:18;;;2856:62;-1:-1:-1;;;2934:18:37;;;2927:46;2990:19;;5653:116:16;2603:412:37;5653:116:16;5828:9;5779:40;-1:-1:-1;;;;;;;;;;;5806:12:16;;5779:26;;;;;:40;;:::i;:::-;:58;;-1:-1:-1;;;;;;5779:58:16;-1:-1:-1;;;;;5779:58:16;;;;;;;;;;-1:-1:-1;5507:337:16:o;6575:198:25:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:25:o;1180:320::-;-1:-1:-1;;;;;1470:19:25;;:23;;;1180:320::o;1599:147:27:-;1726:4;1599:147::o;6959:387:25:-;7100:12;-1:-1:-1;;;;;1470:19:25;;;7124:69;;;;-1:-1:-1;;;7124:69:25;;3222:2:37;7124:69:25;;;3204:21:37;3261:2;3241:18;;;3234:30;3300:34;3280:18;;;3273:62;-1:-1:-1;;;3351:18:37;;;3344:36;3397:19;;7124:69:25;3020:402:37;7124:69:25;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:25;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7204:67:25;;-1:-1:-1;7204:67:25;-1:-1:-1;7288:51:25;7204:67;;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:25:o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:25;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:25;;;;;;;;:::i;14:238:37:-;99:13;;64:5;;-1:-1:-1;;;;;143:33:37;;131:46;;121:74;;191:1;188;181:12;121:74;-1:-1:-1;;;;;213:33:37;;14:238;-1:-1:-1;;14:238:37:o;257:127::-;318:10;313:3;309:20;306:1;299:31;349:4;346:1;339:15;373:4;370:1;363:15;389:258;461:1;471:113;485:6;482:1;479:13;471:113;;;561:11;;;555:18;542:11;;;535:39;507:2;500:10;471:113;;;602:6;599:1;596:13;593:48;;;-1:-1:-1;;637:1:37;619:16;;612:27;389:258::o;652:968::-;740:6;748;801:2;789:9;780:7;776:23;772:32;769:52;;;817:1;814;807:12;769:52;840:40;870:9;840:40;:::i;:::-;924:2;909:18;;903:25;830:50;;-1:-1:-1;;;;;;977:14:37;;;974:34;;;1004:1;1001;994:12;974:34;1042:6;1031:9;1027:22;1017:32;;1087:7;1080:4;1076:2;1072:13;1068:27;1058:55;;1109:1;1106;1099:12;1058:55;1138:2;1132:9;1160:2;1156;1153:10;1150:36;;;1166:18;;:::i;:::-;1241:2;1235:9;1209:2;1295:13;;-1:-1:-1;;1291:22:37;;;1315:2;1287:31;1283:40;1271:53;;;1339:18;;;1359:22;;;1336:46;1333:72;;;1385:18;;:::i;:::-;1425:10;1421:2;1414:22;1460:2;1452:6;1445:18;1500:7;1495:2;1490;1486;1482:11;1478:20;1475:33;1472:53;;;1521:1;1518;1511:12;1472:53;1534:55;1586:2;1581;1573:6;1569:15;1564:2;1560;1556:11;1534:55;:::i;:::-;1608:6;1598:16;;;;;;;652:968;;;;;:::o;1625:222::-;1665:4;1693:1;1690;1687:8;1684:131;;;1737:10;1732:3;1728:20;1725:1;1718:31;1772:4;1769:1;1762:15;1800:4;1797:1;1790:15;1684:131;-1:-1:-1;1832:9:37;;1625:222::o;1852:127::-;1913:10;1908:3;1904:20;1901:1;1894:31;1944:4;1941:1;1934:15;1968:4;1965:1;1958:15;1984:208;2054:6;2107:2;2095:9;2086:7;2082:23;2078:32;2075:52;;;2123:1;2120;2113:12;2075:52;2146:40;2176:9;2146:40;:::i;3427:274::-;3556:3;3594:6;3588:13;3610:53;3656:6;3651:3;3644:4;3636:6;3632:17;3610:53;:::i;:::-;3679:16;;;;;3427:274;-1:-1:-1;;3427:274:37:o;3706:383::-;3855:2;3844:9;3837:21;3818:4;3887:6;3881:13;3930:6;3925:2;3914:9;3910:18;3903:34;3946:66;4005:6;4000:2;3989:9;3985:18;3980:2;3972:6;3968:15;3946:66;:::i;:::-;4073:2;4052:15;-1:-1:-1;;4048:29:37;4033:45;;;;4080:2;4029:54;;3706:383;-1:-1:-1;;3706:383:37:o;:::-;564:1606:18;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_2196": { - "entryPoint": null, - "id": 2196, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_2204": { - "entryPoint": null, - "id": 2204, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_2209": { - "entryPoint": null, - "id": 2209, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_delegate_2169": { - "entryPoint": 295, - "id": 2169, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_fallback_2188": { - "entryPoint": 23, - "id": 2188, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getBeacon_2083": { - "entryPoint": null, - "id": 2083, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_implementation_2276": { - "entryPoint": 116, - "id": 2276, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@functionDelegateCall_3109": { - "entryPoint": 41, - "id": 3109, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_3144": { - "entryPoint": 331, - "id": 3144, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_3224": { - "entryPoint": 113, - "id": 3224, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_2899": { - "entryPoint": 85, - "id": 2899, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_3175": { - "entryPoint": 632, - "id": 3175, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 715, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 847, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 875, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 799, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1776:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "95:283:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "141:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "153:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "143:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "143:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "143:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "116:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "125:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "112:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "112:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "137:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "108:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "108:32:37" - }, - "nodeType": "YulIf", - "src": "105:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "166:29:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "185:9:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "179:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "179:16:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "170:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "283:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "292:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "295:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "285:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "285:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "285:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "217:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "228:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "235:44:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "224:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "224:56:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "214:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "214:67:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "207:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "207:75:37" - }, - "nodeType": "YulIf", - "src": "204:95:37" - }, - { - "nodeType": "YulAssignment", - "src": "308:64:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "322:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "329:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "318:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "318:54:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "308:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "61:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "72:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "84:6:37", - "type": "" - } - ], - "src": "14:364:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "557:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "574:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "585:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "567:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "567:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "567:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "608:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "619:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "604:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "604:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "624:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "597:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "597:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "597:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "647:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "658:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "643:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "643:18:37" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "663:34:37", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "636:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "636:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "636:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "718:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "729:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "714:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "714:18:37" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "734:8:37", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "707:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "707:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "707:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "752:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "764:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "775:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "760:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "760:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "752:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "534:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "548:4:37", - "type": "" - } - ], - "src": "383:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "843:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "853:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "862:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "857:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "922:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "947:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "952:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "943:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "943:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "966:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "971:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "962:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "962:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "956:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "956:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "936:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "936:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "936:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "883:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "886:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "880:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "880:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "894:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "896:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "905:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "908:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "901:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "901:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "896:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "876:3:37", - "statements": [] - }, - "src": "872:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1011:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1024:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1029:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1020:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1020:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1038:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1013:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1013:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1013:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1000:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1003:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "997:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "997:13:37" - }, - "nodeType": "YulIf", - "src": "994:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "821:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "826:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "831:6:37", - "type": "" - } - ], - "src": "790:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1190:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1200:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1220:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1214:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1214:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1204:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1262:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1270:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1258:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1258:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1277:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1282:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1236:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "1236:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1236:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "1298:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1309:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1314:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1305:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1305:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1298:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1166:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1171:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1182:3:37", - "type": "" - } - ], - "src": "1053:274:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1453:321:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1470:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1481:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1463:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1463:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1463:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1493:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1513:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1507:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1507:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1497:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1540:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1551:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1536:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1536:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1556:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1529:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1529:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1529:34:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1598:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1606:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1594:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1594:15:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1615:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1626:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1611:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1611:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1631:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1572:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "1572:66:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1572:66:37" - }, - { - "nodeType": "YulAssignment", - "src": "1647:121:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1663:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1682:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1690:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1678:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1678:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1695:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1674:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1674:88:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1659:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1659:104:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1765:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1655:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1655:113:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1647:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1422:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1433:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1444:4:37", - "type": "" - } - ], - "src": "1332:442:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value0 := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x74 JUMP JUMPDEST PUSH2 0x127 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x3BD PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x14B JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB4 PUSH32 0xA3F0AD74E5423AEBFD80D3EF4346578335A9A72AEAEE59FF6CB3582B35133D50 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5C60DA1B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x122 SWAP2 SWAP1 PUSH2 0x2CB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x146 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x1F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x21E SWAP2 SWAP1 PUSH2 0x34F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x259 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x25E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x26E DUP3 DUP3 DUP7 PUSH2 0x278 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x287 JUMPI POP DUP2 PUSH2 0x4E JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x297 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1ED SWAP2 SWAP1 PUSH2 0x36B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x33A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x322 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x349 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x361 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x31F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x38A DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x31F JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH21 0x726F6E58221220085D6A08C22D68FF894325991888 PUSH29 0x2981B253A56CAF88E3D64637B62A0BB73364736F6C634300080B003300 ", - "sourceMap": "564:1606:18:-:0;;;;;;2903:11:17;:9;:11::i;:::-;564:1606:18;;2680:11:17;2327:110;2402:28;2412:17;:15;:17::i;:::-;2402:9;:28::i;:::-;2327:110::o;6575:198:25:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:25:o;1180:320::-;1470:19;;;:23;;;1180:320::o;1599:147:27:-;1726:4;1599:147::o;1519:138:18:-;1586:7;1620:12;5056:66:16;5372:46;;;;5301:124;1620:12:18;1612:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1605:45;;1519:138;:::o;953:895:17:-;1291:14;1288:1;1285;1272:34;1505:1;1502;1486:14;1483:1;1467:14;1460:5;1447:60;1581:16;1578:1;1575;1560:38;1619:6;1686:66;;;;1801:16;1798:1;1791:27;1686:66;1721:16;1718:1;1711:27;6959:387:25;7100:12;1470:19;;;;7124:69;;;;;;;585:2:37;7124:69:25;;;567:21:37;624:2;604:18;;;597:30;663:34;643:18;;;636:62;734:8;714:18;;;707:36;760:19;;7124:69:25;;;;;;;;;7205:12;7219:23;7246:6;:19;;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7204:67;;;;7288:51;7305:7;7314:10;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:25:o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:25;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;;;;;;;;;;:::i;14:364:37:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;185:9;179:16;235:44;228:5;224:56;217:5;214:67;204:95;;295:1;292;285:12;204:95;329:42;318:54;;14:364;-1:-1:-1;;;14:364:37:o;790:258::-;862:1;872:113;886:6;883:1;880:13;872:113;;;962:11;;;956:18;943:11;;;936:39;908:2;901:10;872:113;;;1003:6;1000:1;997:13;994:48;;;1038:1;1029:6;1024:3;1020:16;1013:27;994:48;;790:258;;;:::o;1053:274::-;1182:3;1220:6;1214:13;1236:53;1282:6;1277:3;1270:4;1262:6;1258:17;1236:53;:::i;:::-;1305:16;;;;;1053:274;-1:-1:-1;;1053:274:37:o;1332:442::-;1481:2;1470:9;1463:21;1444:4;1513:6;1507:13;1556:6;1551:2;1540:9;1536:18;1529:34;1572:66;1631:6;1626:2;1615:9;1611:18;1606:2;1598:6;1594:15;1572:66;:::i;:::-;1690:2;1678:15;1695:66;1674:88;1659:104;;;;1765:2;1655:113;;1332:442;-1:-1:-1;;1332:442:37:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "209800", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite" - }, - "internal": { - "_beacon()": "infinite", - "_implementation()": "infinite", - "_setBeacon(address,bytes memory)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}. The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't conflict with the storage layout of the implementation behind the proxy. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the proxy with `beacon`. If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor. Requirements: - `beacon` must be a contract with the interface {IBeacon}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\":\"BeaconProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\",\"keccak256\":\"0x54878f0d2f40b5e13f84977bcd3c71d4c38581414e7efb4909cb16dd3ace392f\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/Clones.json b/extendedArtifactsTron/Clones.json deleted file mode 100644 index 7a99cad..0000000 --- a/extendedArtifactsTron/Clones.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "contractName": "Clones", - "sourceName": "solc_0.8/openzeppelin/proxy/Clones.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26474726f6e58221220e91ed396d5e91bf87fd8ce3eabac48a444efd1427d88cf6a94fc39c8e74146cb64736f6c634300080b0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26474726f6e58221220e91ed396d5e91bf87fd8ce3eabac48a444efd1427d88cf6a94fc39c8e74146cb64736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for deploying minimal proxy contracts, also known as \"clones\". > To simply and cheaply clone contract functionality in an immutable way, this standard specifies > a minimal bytecode implementation that delegates all calls to a known, fixed address. The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the deterministic method. _Available since v3.4._", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 0xE9 0x1E CALLTOKENID SWAP7 NATIVEFREEZE 0xE9 SHL 0xF8 PUSH32 0xD8CE3EABAC48A444EFD1427D88CF6A94FC39C8E74146CB64736F6C634300080B STOP CALLER ", - "sourceMap": "740:2817:14:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;740:2817:14;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 0xE9 0x1E CALLTOKENID SWAP7 NATIVEFREEZE 0xE9 SHL 0xF8 PUSH32 0xD8CE3EABAC48A444EFD1427D88CF6A94FC39C8E74146CB64736F6C634300080B STOP CALLER ", - "sourceMap": "740:2817:14:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "clone(address)": "infinite", - "cloneDeterministic(address,bytes32)": "infinite", - "predictDeterministicAddress(address,bytes32)": "infinite", - "predictDeterministicAddress(address,bytes32,address)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for deploying minimal proxy contracts, also known as \\\"clones\\\". > To simply and cheaply clone contract functionality in an immutable way, this standard specifies > a minimal bytecode implementation that delegates all calls to a known, fixed address. The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the deterministic method. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/Clones.sol\":\"Clones\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/proxy/Clones.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\",\"keccak256\":\"0x1cc0efb01cbf008b768fd7b334786a6e358809198bb7e67f1c530af4957c6a21\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/Context.json b/extendedArtifactsTron/Context.json deleted file mode 100644 index b653c8c..0000000 --- a/extendedArtifactsTron/Context.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "contractName": "Context", - "sourceName": "solc_0.8/openzeppelin/utils/Context.sol", - "abi": [], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/Context.sol\":\"Context\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/Diamond.json b/extendedArtifactsTron/Diamond.json deleted file mode 100644 index 2ac933b..0000000 --- a/extendedArtifactsTron/Diamond.json +++ /dev/null @@ -1,17557 +0,0 @@ -{ - "contractName": "Diamond", - "sourceName": "solc_0.8/diamond/Diamond.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct Diamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60806040526040516200322b3803806200322b83398101604081905262000026916200134d565b6001600160a01b038316156200004c576200004c83620000f760201b620001071760201c565b62000074826000604051806020016040528060008152506200017b60201b620001c11760201c565b60005b8151811015620000ed57620000d88282815181106200009a576200009a62001521565b602002602001015160000151838381518110620000bb57620000bb62001521565b602002602001015160200151620003d960201b620004051760201c565b80620000e4816200154d565b91505062000077565b505050506200174a565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080546001600160a01b031981166001600160a01b038481169182179093556040516000805160206200317f833981519152939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156200038a5760008482815181106200019f576200019f62001521565b602002602001015160200151905060006002811115620001c357620001c36200156b565b816002811115620001d857620001d86200156b565b1415620002375762000231858381518110620001f857620001f862001521565b60200260200101516000015186848151811062000219576200021962001521565b602002602001015160400151620005fe60201b60201c565b62000374565b60018160028111156200024e576200024e6200156b565b1415620002a757620002318583815181106200026e576200026e62001521565b6020026020010151600001518684815181106200028f576200028f62001521565b6020026020010151604001516200088860201b60201c565b6002816002811115620002be57620002be6200156b565b1415620003175762000231858381518110620002de57620002de62001521565b602002602001015160000151868481518110620002ff57620002ff62001521565b60200260200101516040015162000b1e60201b60201c565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b60648201526084015b60405180910390fd5b508062000381816200154d565b9150506200017e565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051620003c093929190620015af565b60405180910390a1620003d48282620003d9565b505050565b6001600160a01b03821662000463578051156200045f5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016200036b565b5050565b6000815111620004dc5760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016200036b565b6001600160a01b0382163014620005125762000512826040518060600160405280602881526020016200319f6028913962000c7e565b600080836001600160a01b0316836040516200052f9190620016b6565b600060405180830381855af49150503d80600081146200056c576040519150601f19603f3d011682016040523d82523d6000602084013e62000571565b606091505b509150915081620005f857805115620005a0578060405162461bcd60e51b81526004016200036b9190620016d4565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b60648201526084016200036b565b50505050565b6000815111620006545760405162461bcd60e51b815260206004820152602b60248201526000805160206200320b83398151915260448201526a1858d95d081d1bc818dd5d60aa1b60648201526084016200036b565b6000805160206200317f8339815191526001600160a01b038316620006c05760405162461bcd60e51b815260206004820152602c6024820152600080516020620031c783398151915260448201526b65206164647265737328302960a01b60648201526084016200036b565b6001600160a01b03831660009081526001820160205260409020546001600160601b038116620006f657620006f6828562000ca2565b60005b8351811015620008815760008482815181106200071a576200071a62001521565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03168015620007c25760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016200036b565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b031916179055836200086681620016f0565b9450505050808062000878906200154d565b915050620006f9565b5050505050565b6000815111620008de5760405162461bcd60e51b815260206004820152602b60248201526000805160206200320b83398151915260448201526a1858d95d081d1bc818dd5d60aa1b60648201526084016200036b565b6000805160206200317f8339815191526001600160a01b0383166200094a5760405162461bcd60e51b815260206004820152602c6024820152600080516020620031c783398151915260448201526b65206164647265737328302960a01b60648201526084016200036b565b6001600160a01b03831660009081526001820160205260409020546001600160601b038116620009805762000980828562000ca2565b60005b835181101562000881576000848281518110620009a457620009a462001521565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690871681141562000a525760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016200036b565b62000a5f85828462000d0f565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b0319161790558362000b0381620016f0565b9450505050808062000b15906200154d565b91505062000983565b600081511162000b745760405162461bcd60e51b815260206004820152602b60248201526000805160206200320b83398151915260448201526a1858d95d081d1bc818dd5d60aa1b60648201526084016200036b565b6000805160206200317f8339815191526001600160a01b0383161562000c035760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016200036b565b60005b8251811015620005f857600083828151811062000c275762000c2762001521565b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b031662000c6684828462000d0f565b5050808062000c75906200154d565b91505062000c06565b813b8181620005f85760405162461bcd60e51b81526004016200036b9190620016d4565b62000cc781604051806060016040528060248152602001620031e76024913962000c7e565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160a01b03821662000d8d5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016200036b565b6001600160a01b03821630141562000dff5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b60648201526084016200036b565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b0316929162000e50916200171a565b905080821462000f49576001600160a01b0384166000908152600186016020526040812080548390811062000e895762000e8962001521565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b92508291908590811062000edd5762000edd62001521565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b0384166000908152600186016020526040902080548062000f755762000f7562001734565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319851682528690526040812055806200088157600285015460009062000fd7906001906200171a565b6001600160a01b03861660009081526001808901602052604090912001549091508082146200108d5760008760020183815481106200101a576200101a62001521565b6000918252602090912001546002890180546001600160a01b0390921692508291849081106200104e576200104e62001521565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b86600201805480620010a357620010a362001734565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505050505050565b80516000906001600160a81b03811681146200110757600080fd5b6001600160a01b031692915050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171562001151576200115162001116565b60405290565b604051606081016001600160401b038111828210171562001151576200115162001116565b604051601f8201601f191681016001600160401b0381118282101715620011a757620011a762001116565b604052919050565b60006001600160401b03821115620011cb57620011cb62001116565b5060051b60200190565b60005b83811015620011f2578181015183820152602001620011d8565b83811115620005f85750506000910152565b6000601f83818401126200121757600080fd5b82516020620012306200122a83620011af565b6200117c565b82815260059290921b850181019181810190878411156200125057600080fd5b8287015b84811015620013415780516001600160401b0380821115620012765760008081fd5b908901906040601f19838d038101821315620012925760008081fd5b6200129c6200112c565b620012a9898601620010ec565b81528285015184811115620012be5760008081fd5b8086019550508d603f860112620012d55760008081fd5b8885015184811115620012ec57620012ec62001116565b620012fd8a848e840116016200117c565b94508085528e848288010111156200131757600092508283fd5b62001328818b8701868901620011d5565b5080890193909352505084525091830191830162001254565b50979650505050505050565b6000806000606084860312156200136357600080fd5b6200136e84620010ec565b60208501519093506001600160401b03808211156200138c57600080fd5b818601915086601f830112620013a157600080fd5b8151620013b26200122a82620011af565b8082825260208201915060208360051b860101925089831115620013d557600080fd5b602085015b83811015620014ed57805185811115620013f357600080fd5b86016060818d03601f190112156200140a57600080fd5b6200141462001157565b6200142260208301620010ec565b81526040820151600381106200143757600080fd5b60208201526060820151878111156200144f57600080fd5b8083019250508c603f8301126200146557600080fd5b6020820151620014796200122a82620011af565b81815260059190911b83016040019060208101908f8311156200149b57600080fd5b6040850194505b82851015620014d65784516001600160e01b031981168114620014c457600080fd5b825260209485019490910190620014a2565b6040840152505084525060209283019201620013da565b50604089015190965093505050808211156200150857600080fd5b50620015178682870162001204565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141562001564576200156462001537565b5060010190565b634e487b7160e01b600052602160045260246000fd5b600081518084526200159b816020860160208601620011d5565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156200168457898403607f19018652815180516001600160a01b031685528381015189860190600381106200162057634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156200166e5783516001600160e01b031916825292860192600192909201919086019062001642565b50978501979550505090820190600101620015d8565b50506001600160a01b038a16908801528681036040880152620016a8818962001581565b9a9950505050505050505050565b60008251620016ca818460208701620011d5565b9190910192915050565b602081526000620016e9602083018462001581565b9392505050565b60006001600160601b038281168082141562001710576200171062001537565b6001019392505050565b6000828210156200172f576200172f62001537565b500390565b634e487b7160e01b600052603160045260246000fd5b611a25806200175a6000396000f3fe60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f7420657869737460448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610102573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156103ba5760008482815181106101e1576101e1611657565b60200260200101516020015190506000600281111561020257610202611686565b81600281111561021457610214611686565b14156102635761025e85838151811061022f5761022f611657565b60200260200101516000015186848151811061024d5761024d611657565b6020026020010151604001516106be565b6103a7565b600181600281111561027757610277611686565b14156102c15761025e85838151811061029257610292611657565b6020026020010151600001518684815181106102b0576102b0611657565b602002602001015160400151610a71565b60028160028111156102d5576102d5611686565b141561031f5761025e8583815181106102f0576102f0611657565b60200260200101516000015186848151811061030e5761030e611657565b602002602001015160400151610e2e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e0000000000000000000000000000000000000000000000000060648201526084016100da565b50806103b2816116e4565b9150506101c4565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516103ee93929190611793565b60405180910390a16104008282610405565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166104b3578051156104af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016100da565b5050565b6000815111610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff8216301461058357610583826040518060600160405280602881526020016119a46028913961101b565b6000808373ffffffffffffffffffffffffffffffffffffffff16836040516105ab91906118fb565b600060405180830381855af49150503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b5091509150816106b85780511561063057806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100da9190611917565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560448201527f766572746564000000000000000000000000000000000000000000000000000060648201526084016100da565b50505050565b600081511161074f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610858576108588285611056565b60005b8351811015610a6a57600084828151811061087857610878611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16801561095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016100da565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610a5281611931565b94505050508080610a62906116e4565b91505061085b565b5050505050565b6000815111610b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610c0b57610c0b8285611056565b60005b8351811015610a6a576000848281518110610c2b57610c2b611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016100da565b610d218582846110e5565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610e1681611931565b94505050508080610e26906116e4565b915050610c0e565b6000815111610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016100da565b60005b82518110156106b8576000838281518110610fa457610fa4611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff166110068482846110e5565b50508080611013906116e4565b915050610f87565b813b81816106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100da9190611917565b611078816040518060600160405280602481526020016119cc6024913961101b565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff821630141561122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e00000000000000000000000000000000000060648201526084016100da565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff1692916112b89161195d565b90508082146113ff5773ffffffffffffffffffffffffffffffffffffffff8416600090815260018601602052604081208054839081106112fa576112fa611657565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b92508291908590811061135857611358611657565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff84166000908152600186016020526040902080548061143557611435611974565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff0000000000000000000000000000000000000000000000000000000085168252869052604081205580610a6a5760028501546000906114ca9060019061195d565b73ffffffffffffffffffffffffffffffffffffffff861660009081526001808901602052604090912001549091508082146115b857600087600201838154811061151657611516611657565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff909216925082918490811061155457611554611657565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b866002018054806115cb576115cb611974565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611716576117166116b5565b5060010190565b60005b83811015611738578181015183820152602001611720565b838111156106b85750506000910152565b6000815180845261176181602086016020860161171d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156118be577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611845577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156118a95783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611867565b509785019795505050908201906001016117bc565b505073ffffffffffffffffffffffffffffffffffffffff8a169088015286810360408801526118ed8189611749565b9a9950505050505050505050565b6000825161190d81846020870161171d565b9190910192915050565b60208152600061192a6020830184611749565b9392505050565b60006bffffffffffffffffffffffff80831681811415611953576119536116b5565b6001019392505050565b60008282101561196f5761196f6116b5565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26474726f6e58221220bddc11b0a43d16aa15c78f9534f7275d2d988ab86e49a953fce3e4bcd0367f1164736f6c634300080b0033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204164642066616365742063616e277420624c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f64654c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066", - "deployedBytecode": "0x60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f7420657869737460448201526064015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610102573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156103ba5760008482815181106101e1576101e1611657565b60200260200101516020015190506000600281111561020257610202611686565b81600281111561021457610214611686565b14156102635761025e85838151811061022f5761022f611657565b60200260200101516000015186848151811061024d5761024d611657565b6020026020010151604001516106be565b6103a7565b600181600281111561027757610277611686565b14156102c15761025e85838151811061029257610292611657565b6020026020010151600001518684815181106102b0576102b0611657565b602002602001015160400151610a71565b60028160028111156102d5576102d5611686565b141561031f5761025e8583815181106102f0576102f0611657565b60200260200101516000015186848151811061030e5761030e611657565b602002602001015160400151610e2e565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e0000000000000000000000000000000000000000000000000060648201526084016100da565b50806103b2816116e4565b9150506101c4565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516103ee93929190611793565b60405180910390a16104008282610405565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166104b3578051156104af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016100da565b5050565b6000815111610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff8216301461058357610583826040518060600160405280602881526020016119a46028913961101b565b6000808373ffffffffffffffffffffffffffffffffffffffff16836040516105ab91906118fb565b600060405180830381855af49150503d80600081146105e6576040519150601f19603f3d011682016040523d82523d6000602084013e6105eb565b606091505b5091509150816106b85780511561063057806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100da9190611917565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560448201527f766572746564000000000000000000000000000000000000000000000000000060648201526084016100da565b50505050565b600081511161074f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610858576108588285611056565b60005b8351811015610a6a57600084828151811061087857610878611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16801561095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016100da565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610a5281611931565b94505050508080610a62906116e4565b91505061085b565b5050505050565b6000815111610b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f652061646472657373283029000000000000000000000000000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610c0b57610c0b8285611056565b60005b8351811015610a6a576000848281518110610c2b57610c2b611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016100da565b610d218582846110e5565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610e1681611931565b94505050508080610e26906116e4565b915050610c0e565b6000815111610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f2063757400000000000000000000000000000000000000000060648201526084016100da565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016100da565b60005b82518110156106b8576000838281518110610fa457610fa4611657565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff166110068482846110e5565b50508080611013906116e4565b915050610f87565b813b81816106b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100da9190611917565b611078816040518060600160405280602481526020016119cc6024913961101b565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016100da565b73ffffffffffffffffffffffffffffffffffffffff821630141561122e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e00000000000000000000000000000000000060648201526084016100da565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff1692916112b89161195d565b90508082146113ff5773ffffffffffffffffffffffffffffffffffffffff8416600090815260018601602052604081208054839081106112fa576112fa611657565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b92508291908590811061135857611358611657565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff84166000908152600186016020526040902080548061143557611435611974565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff0000000000000000000000000000000000000000000000000000000085168252869052604081205580610a6a5760028501546000906114ca9060019061195d565b73ffffffffffffffffffffffffffffffffffffffff861660009081526001808901602052604090912001549091508082146115b857600087600201838154811061151657611516611657565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff909216925082918490811061155457611554611657565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b866002018054806115cb576115cb611974565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611716576117166116b5565b5060010190565b60005b83811015611738578181015183820152602001611720565b838111156106b85750506000910152565b6000815180845261176181602086016020860161171d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156118be577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611845577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156118a95783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611867565b509785019795505050908201906001016117bc565b505073ffffffffffffffffffffffffffffffffffffffff8a169088015286810360408801526118ed8189611749565b9a9950505050505050505050565b6000825161190d81846020870161171d565b9190910192915050565b60208152600061192a6020830184611749565b9392505050565b60006bffffffffffffffffffffffff80831681811415611953576119536116b5565b6001019392505050565b60008282101561196f5761196f6116b5565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26474726f6e58221220bddc11b0a43d16aa15c78f9534f7275d2d988ab86e49a953fce3e4bcd0367f1164736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "constructor": { - "params": { - "_contractOwner": "the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.", - "_diamondCut": "the list of facet to add", - "_initializations": "the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization." - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_76": { - "entryPoint": null, - "id": 76, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@addFacet_1286": { - "entryPoint": 3234, - "id": 1286, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@addFunction_1327": { - "entryPoint": null, - "id": 1327, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@addFunctions_1084": { - "entryPoint": 1534, - "id": 1084, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@diamondCut_983": { - "entryPoint": 379, - "id": 983, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@enforceHasContractCode_1590": { - "entryPoint": 3198, - "id": 1590, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@initializeDiamondCut_1571": { - "entryPoint": 985, - "id": 1571, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@removeFunction_1494": { - "entryPoint": 3343, - "id": 1494, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@removeFunctions_1253": { - "entryPoint": 2846, - "id": 1253, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@replaceFunctions_1188": { - "entryPoint": 2184, - "id": 1188, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@setContractOwner_843": { - "entryPoint": 247, - "id": 843, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 4332, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_array_struct_Initialization_dyn_fromMemory": { - "entryPoint": 4612, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptrt_array$_t_struct$_Initialization_$10_memory_ptr_$dyn_memory_ptr_fromMemory": { - "entryPoint": 4941, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_address": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_bytes": { - "entryPoint": 5505, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 5814, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 5551, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 5844, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 4476, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory_3428": { - "entryPoint": 4396, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "allocate_memory_3429": { - "entryPoint": 4439, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "array_allocation_size_array_struct_FacetCut_dyn": { - "entryPoint": 4527, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 5914, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 4565, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "increment_t_uint256": { - "entryPoint": 5453, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "increment_t_uint96": { - "entryPoint": 5872, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 5431, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x21": { - "entryPoint": 5483, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x31": { - "entryPoint": 5940, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 5409, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 4374, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:14971:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:178:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "84:28:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "105:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "99:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "99:13:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "88:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "179:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "188:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "191:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "181:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "181:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "181:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "134:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "147:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "164:3:37", - "type": "", - "value": "168" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "169:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "160:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "160:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "173:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "156:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "156:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "143:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "143:33:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "131:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "131:46:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "124:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "124:54:37" - }, - "nodeType": "YulIf", - "src": "121:74:37" - }, - { - "nodeType": "YulAssignment", - "src": "204:42:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "217:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "234:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "239:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "230:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "230:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "226:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "226:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "213:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "213:33:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "204:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:37", - "type": "" - } - ], - "src": "14:238:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "289:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "306:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "313:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "318:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "309:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "309:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "299:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "299:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "299:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "346:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "349:4:37", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "339:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "339:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "339:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "370:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "373:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "363:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "363:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "363:15:37" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "257:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "435:211:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "445:21:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "461:4:37", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "455:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "455:11:37" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "445:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "475:35:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "497:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "505:4:37", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "493:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "493:17:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "479:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "585:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "587:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "587:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "587:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "528:10:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "548:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "552:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "544:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "544:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "556:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "540:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "540:18:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "525:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "525:34:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "564:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "576:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "561:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "561:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "522:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "522:62:37" - }, - "nodeType": "YulIf", - "src": "519:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "623:4:37", - "type": "", - "value": "0x40" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "629:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "616:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "616:24:37" - }, - "nodeType": "YulExpressionStatement", - "src": "616:24:37" - } - ] - }, - "name": "allocate_memory_3428", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "424:6:37", - "type": "" - } - ], - "src": "389:257:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "697:205:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "707:19:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "723:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "717:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "717:9:37" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "707:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "735:33:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "757:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "765:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "753:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "753:15:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "739:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "843:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "845:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "845:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "845:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "786:10:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "806:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "810:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "802:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "802:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "814:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "798:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "798:18:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "783:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "783:34:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "822:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "834:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "819:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "819:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "780:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "780:62:37" - }, - "nodeType": "YulIf", - "src": "777:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "881:2:37", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "885:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "874:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "874:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "874:22:37" - } - ] - }, - "name": "allocate_memory_3429", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "686:6:37", - "type": "" - } - ], - "src": "651:251:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "952:230:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "962:19:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "978:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "972:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "972:9:37" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "962:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "990:58:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1012:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "1028:4:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1034:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1024:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1024:13:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1043:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1039:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1039:7:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1020:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1020:27:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1008:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1008:40:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "994:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1123:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1125:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1125:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1125:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1066:10:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1086:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1090:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1082:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1082:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1094:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1078:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1078:18:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1063:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1063:34:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1102:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1114:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1099:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1099:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1060:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1060:62:37" - }, - "nodeType": "YulIf", - "src": "1057:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1161:2:37", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1165:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1154:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1154:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1154:22:37" - } - ] - }, - "name": "allocate_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "932:4:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "941:6:37", - "type": "" - } - ], - "src": "907:275:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1264:114:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1308:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1310:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1310:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1310:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1280:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1296:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1300:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1292:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1292:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1304:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1288:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1288:18:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1277:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1277:30:37" - }, - "nodeType": "YulIf", - "src": "1274:56:37" - }, - { - "nodeType": "YulAssignment", - "src": "1339:33:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1355:1:37", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1358:6:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1351:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1351:14:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1367:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1347:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1347:25:37" - }, - "variableNames": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "1339:4:37" - } - ] - } - ] - }, - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1244:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "1255:4:37", - "type": "" - } - ], - "src": "1187:191:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1436:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1446:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1455:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1450:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1515:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1540:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1545:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1536:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1536:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "1559:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1564:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1555:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1555:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1549:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1549:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1529:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1529:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1529:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1476:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1479:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1473:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1473:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1487:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1489:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1498:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1501:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1494:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1494:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1489:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1469:3:37", - "statements": [] - }, - "src": "1465:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1604:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1617:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1622:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1613:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1613:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1631:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1606:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1606:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1606:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1593:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1596:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1590:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1590:13:37" - }, - "nodeType": "YulIf", - "src": "1587:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "1414:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "1419:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1424:6:37", - "type": "" - } - ], - "src": "1383:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1735:1967:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1745:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1755:4:37", - "type": "", - "value": "0x1f" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1749:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1805:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1814:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1817:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1807:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1807:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1807:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1786:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1794:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1782:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1782:15:37" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1799:3:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1778:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1778:25:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1771:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1771:33:37" - }, - "nodeType": "YulIf", - "src": "1768:53:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1830:23:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1846:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1840:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1840:13:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1834:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1862:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1872:4:37", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1866:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1885:79:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1960:2:37" - } - ], - "functionName": { - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulIdentifier", - "src": "1912:47:37" - }, - "nodeType": "YulFunctionCall", - "src": "1912:51:37" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "1896:15:37" - }, - "nodeType": "YulFunctionCall", - "src": "1896:68:37" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "1889:3:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1973:16:37", - "value": { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1986:3:37" - }, - "variables": [ - { - "name": "dst_1", - "nodeType": "YulTypedName", - "src": "1977:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2005:3:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2010:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1998:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1998:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1998:15:37" - }, - { - "nodeType": "YulAssignment", - "src": "2022:19:37", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2033:3:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2038:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2029:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2029:12:37" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2022:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2050:46:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2072:6:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2084:1:37", - "type": "", - "value": "5" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2087:2:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2080:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2080:10:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2068:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2068:23:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2093:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2064:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2064:32:37" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "2054:6:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2124:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2133:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2136:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2126:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2126:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2126:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "2111:6:37" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2119:3:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2108:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2108:15:37" - }, - "nodeType": "YulIf", - "src": "2105:35:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2149:26:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2164:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2172:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2160:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2160:15:37" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "2153:3:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2240:1433:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2254:29:37", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2279:3:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2273:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2273:10:37" - }, - "variables": [ - { - "name": "innerOffset", - "nodeType": "YulTypedName", - "src": "2258:11:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2296:28:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2314:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2318:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2310:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2310:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2322:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2306:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2306:18:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "2300:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2372:74:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2390:11:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2400:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "2394:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "2425:2:37" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "2429:2:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2418:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2418:14:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2418:14:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "2343:11:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2356:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2340:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2340:19:37" - }, - "nodeType": "YulIf", - "src": "2337:109:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2459:34:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2473:6:37" - }, - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "2481:11:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2469:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2469:24:37" - }, - "variables": [ - { - "name": "_6", - "nodeType": "YulTypedName", - "src": "2463:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2506:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2516:4:37", - "type": "", - "value": "0x40" - }, - "variables": [ - { - "name": "_7", - "nodeType": "YulTypedName", - "src": "2510:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2533:17:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2547:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "2543:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2543:7:37" - }, - "variables": [ - { - "name": "_8", - "nodeType": "YulTypedName", - "src": "2537:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2609:74:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2627:11:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2637:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_9", - "nodeType": "YulTypedName", - "src": "2631:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "2662:2:37" - }, - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "2666:2:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2655:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2655:14:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2655:14:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2578:3:37" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "2583:2:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2574:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2574:12:37" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "2588:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2570:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2570:21:37" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "2593:2:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2566:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2566:30:37" - }, - "nodeType": "YulIf", - "src": "2563:120:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2696:35:37", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_3428", - "nodeType": "YulIdentifier", - "src": "2709:20:37" - }, - "nodeType": "YulFunctionCall", - "src": "2709:22:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2700:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2751:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "2792:2:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2796:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2788:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2788:11:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "2758:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "2758:42:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2744:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2744:57:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2744:57:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2814:34:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "2840:2:37" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "2844:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2836:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2836:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2830:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2830:18:37" - }, - "variables": [ - { - "name": "offset_1", - "nodeType": "YulTypedName", - "src": "2818:8:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2893:77:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2911:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2922:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_10", - "nodeType": "YulTypedName", - "src": "2915:3:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "2947:3:37" - }, - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "2952:3:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2940:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2940:16:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2940:16:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "2867:8:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2877:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2864:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2864:16:37" - }, - "nodeType": "YulIf", - "src": "2861:109:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2983:28:37", - "value": { - "arguments": [ - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "2998:2:37" - }, - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "3002:8:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2994:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2994:17:37" - }, - "variables": [ - { - "name": "_11", - "nodeType": "YulTypedName", - "src": "2987:3:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3070:77:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3088:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3099:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_12", - "nodeType": "YulTypedName", - "src": "3092:3:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "3124:3:37" - }, - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "3129:3:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3117:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3117:16:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3117:16:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "3042:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3047:2:37", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3038:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3038:12:37" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3052:3:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3034:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3034:22:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3027:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3027:30:37" - }, - "nodeType": "YulIf", - "src": "3024:123:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3160:30:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "3181:3:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3186:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3177:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3177:12:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3171:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3171:19:37" - }, - "variables": [ - { - "name": "_13", - "nodeType": "YulTypedName", - "src": "3164:3:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3218:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "3220:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "3220:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3220:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "3209:3:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3214:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3206:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3206:11:37" - }, - "nodeType": "YulIf", - "src": "3203:37:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3253:62:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "3296:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3301:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3292:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3292:12:37" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "3306:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3288:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3288:21:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3311:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3284:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3284:30:37" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "3268:15:37" - }, - "nodeType": "YulFunctionCall", - "src": "3268:47:37" - }, - "variables": [ - { - "name": "array_1", - "nodeType": "YulTypedName", - "src": "3257:7:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "array_1", - "nodeType": "YulIdentifier", - "src": "3335:7:37" - }, - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "3344:3:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3328:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3328:20:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3328:20:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3408:77:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3426:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3437:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_14", - "nodeType": "YulTypedName", - "src": "3430:3:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_14", - "nodeType": "YulIdentifier", - "src": "3462:3:37" - }, - { - "name": "_14", - "nodeType": "YulIdentifier", - "src": "3467:3:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3455:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3455:16:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3455:16:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "3375:3:37" - }, - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "3380:3:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3371:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3371:13:37" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "3386:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3367:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3367:22:37" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3391:3:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3364:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3364:31:37" - }, - "nodeType": "YulIf", - "src": "3361:124:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "3524:3:37" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "3529:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3520:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3520:12:37" - }, - { - "arguments": [ - { - "name": "array_1", - "nodeType": "YulIdentifier", - "src": "3538:7:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3547:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3534:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3534:16:37" - }, - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "3552:3:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3498:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "3498:58:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3498:58:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3580:5:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3587:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3576:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3576:14:37" - }, - { - "name": "array_1", - "nodeType": "YulIdentifier", - "src": "3592:7:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3569:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3569:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3569:31:37" - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3620:3:37" - }, - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3625:5:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3613:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3613:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3613:18:37" - }, - { - "nodeType": "YulAssignment", - "src": "3644:19:37", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3655:3:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3660:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3651:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3651:12:37" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3644:3:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2195:3:37" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "2200:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2192:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2192:15:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2208:23:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2210:19:37", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2221:3:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2226:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2217:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2217:12:37" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2210:3:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2188:3:37", - "statements": [] - }, - "src": "2184:1489:37" - }, - { - "nodeType": "YulAssignment", - "src": "3682:14:37", - "value": { - "name": "dst_1", - "nodeType": "YulIdentifier", - "src": "3691:5:37" - }, - "variableNames": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "3682:5:37" - } - ] - } - ] - }, - "name": "abi_decode_array_struct_Initialization_dyn_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1709:6:37", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1717:3:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "1725:5:37", - "type": "" - } - ], - "src": "1646:2056:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3927:2455:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3973:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3982:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3985:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3975:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3975:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3975:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3948:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3957:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3944:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3944:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3969:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3940:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3940:32:37" - }, - "nodeType": "YulIf", - "src": "3937:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "3998:50:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4038:9:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "4008:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "4008:40:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3998:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4057:39:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4081:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4092:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4077:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4077:18:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4071:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "4071:25:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "4061:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4105:28:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4123:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4127:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4119:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4119:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4131:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4115:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4115:18:37" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "4109:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4160:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4169:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4172:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4162:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4162:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4162:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4148:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4156:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4145:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "4145:14:37" - }, - "nodeType": "YulIf", - "src": "4142:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4185:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4199:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4210:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4195:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4195:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "4189:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4265:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4274:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4277:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4267:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4267:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4267:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4244:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4248:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4240:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4240:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4255:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4236:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4236:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4229:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4229:35:37" - }, - "nodeType": "YulIf", - "src": "4226:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4290:19:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4306:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4300:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "4300:9:37" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "4294:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4318:79:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4393:2:37" - } - ], - "functionName": { - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulIdentifier", - "src": "4345:47:37" - }, - "nodeType": "YulFunctionCall", - "src": "4345:51:37" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "4329:15:37" - }, - "nodeType": "YulFunctionCall", - "src": "4329:68:37" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "4322:3:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4406:16:37", - "value": { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "4419:3:37" - }, - "variables": [ - { - "name": "dst_1", - "nodeType": "YulTypedName", - "src": "4410:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "4438:3:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4443:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4431:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4431:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4431:15:37" - }, - { - "nodeType": "YulAssignment", - "src": "4455:19:37", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "4466:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4471:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4462:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4462:12:37" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "4455:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4483:42:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4505:2:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4513:1:37", - "type": "", - "value": "5" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4516:2:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4509:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4509:10:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4501:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4501:19:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4522:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4497:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4497:28:37" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "4487:6:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4557:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4566:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4569:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4559:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4559:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4559:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "4540:6:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4548:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4537:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "4537:19:37" - }, - "nodeType": "YulIf", - "src": "4534:39:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4582:22:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4597:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4601:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4593:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4593:11:37" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "4586:3:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4669:1481:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4683:29:37", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4708:3:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4702:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "4702:10:37" - }, - "variables": [ - { - "name": "innerOffset", - "nodeType": "YulTypedName", - "src": "4687:11:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4748:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4757:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4760:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4750:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4750:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4750:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "4731:11:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4744:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4728:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "4728:19:37" - }, - "nodeType": "YulIf", - "src": "4725:39:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4777:30:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4791:2:37" - }, - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "4795:11:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4787:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4787:20:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "4781:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4863:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4872:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4875:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4865:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4865:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4865:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4835:7:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "4844:2:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4831:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4831:16:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4853:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "4849:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4849:7:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4827:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4827:30:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4859:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4823:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4823:39:37" - }, - "nodeType": "YulIf", - "src": "4820:59:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4892:35:37", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_3429", - "nodeType": "YulIdentifier", - "src": "4905:20:37" - }, - "nodeType": "YulFunctionCall", - "src": "4905:22:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "4896:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4947:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "4988:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4992:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4984:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4984:11:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "4954:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "4954:42:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4940:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4940:57:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4940:57:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5010:33:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "5035:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5039:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5031:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5031:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5025:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "5025:18:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "5014:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5082:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5091:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5094:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5084:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5084:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5084:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5069:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5078:1:37", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "5066:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "5066:14:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5059:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5059:22:37" - }, - "nodeType": "YulIf", - "src": "5056:42:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5122:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5129:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5118:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5118:14:37" - }, - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5134:7:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5111:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5111:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5111:31:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5155:34:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "5181:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5185:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5177:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5177:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5171:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "5171:18:37" - }, - "variables": [ - { - "name": "offset_1", - "nodeType": "YulTypedName", - "src": "5159:8:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5222:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5231:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5234:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5224:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5224:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5224:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "5208:8:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "5218:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "5205:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "5205:16:37" - }, - "nodeType": "YulIf", - "src": "5202:36:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5251:27:37", - "value": { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "5265:2:37" - }, - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "5269:8:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5261:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5261:17:37" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "5255:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5328:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5337:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5340:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5330:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5330:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5330:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "5309:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5313:2:37", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5305:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5305:11:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "5318:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "5301:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5301:25:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5294:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5294:33:37" - }, - "nodeType": "YulIf", - "src": "5291:53:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5357:28:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "5377:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5381:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5373:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5373:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5367:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "5367:18:37" - }, - "variables": [ - { - "name": "_6", - "nodeType": "YulTypedName", - "src": "5361:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5398:81:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "5475:2:37" - } - ], - "functionName": { - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulIdentifier", - "src": "5427:47:37" - }, - "nodeType": "YulFunctionCall", - "src": "5427:51:37" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "5411:15:37" - }, - "nodeType": "YulFunctionCall", - "src": "5411:68:37" - }, - "variables": [ - { - "name": "dst_2", - "nodeType": "YulTypedName", - "src": "5402:5:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5492:18:37", - "value": { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5505:5:37" - }, - "variables": [ - { - "name": "dst_3", - "nodeType": "YulTypedName", - "src": "5496:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5530:5:37" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "5537:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5523:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5523:17:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5523:17:37" - }, - { - "nodeType": "YulAssignment", - "src": "5553:23:37", - "value": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5566:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5573:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5562:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5562:14:37" - }, - "variableNames": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5553:5:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5589:44:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "5613:2:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5621:1:37", - "type": "", - "value": "5" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "5624:2:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "5617:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5617:10:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5609:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5609:19:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5630:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5605:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5605:28:37" - }, - "variables": [ - { - "name": "srcEnd_1", - "nodeType": "YulTypedName", - "src": "5593:8:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5671:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5680:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5683:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5673:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5673:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5673:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd_1", - "nodeType": "YulIdentifier", - "src": "5652:8:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "5662:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "5649:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "5649:21:37" - }, - "nodeType": "YulIf", - "src": "5646:41:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5700:24:37", - "value": { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "5717:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5721:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5713:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5713:11:37" - }, - "variables": [ - { - "name": "src_1", - "nodeType": "YulTypedName", - "src": "5704:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5805:230:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "5823:27:37", - "value": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "5844:5:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5838:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "5838:12:37" - }, - "variables": [ - { - "name": "value_2", - "nodeType": "YulTypedName", - "src": "5827:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5926:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5935:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5938:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5928:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5928:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5928:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "5880:7:37" - }, - { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "5893:7:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5906:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5911:10:37", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "5902:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5902:20:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5889:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5889:34:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "5877:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "5877:47:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5870:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5870:55:37" - }, - "nodeType": "YulIf", - "src": "5867:75:37" - }, - { - "expression": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5966:5:37" - }, - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "5973:7:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5959:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5959:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5959:22:37" - }, - { - "nodeType": "YulAssignment", - "src": "5998:23:37", - "value": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "6011:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6018:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6007:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6007:14:37" - }, - "variableNames": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5998:5:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "5748:5:37" - }, - { - "name": "srcEnd_1", - "nodeType": "YulIdentifier", - "src": "5755:8:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "5745:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "5745:19:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "5765:27:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5767:23:37", - "value": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "5780:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5787:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5776:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5776:14:37" - }, - "variableNames": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "5767:5:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "5741:3:37", - "statements": [] - }, - "src": "5737:298:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6059:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6066:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6055:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6055:14:37" - }, - { - "name": "dst_3", - "nodeType": "YulIdentifier", - "src": "6071:5:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6048:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6048:29:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6048:29:37" - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "6097:3:37" - }, - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6102:5:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6090:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6090:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6090:18:37" - }, - { - "nodeType": "YulAssignment", - "src": "6121:19:37", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "6132:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6137:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6128:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6128:12:37" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "6121:3:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4624:3:37" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "4629:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "4621:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "4621:15:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "4637:23:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4639:19:37", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4650:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4655:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4646:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4646:12:37" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4639:3:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "4617:3:37", - "statements": [] - }, - "src": "4613:1537:37" - }, - { - "nodeType": "YulAssignment", - "src": "6159:15:37", - "value": { - "name": "dst_1", - "nodeType": "YulIdentifier", - "src": "6169:5:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "6159:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6183:41:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6209:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6220:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6205:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6205:18:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "6199:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "6199:25:37" - }, - "variables": [ - { - "name": "offset_2", - "nodeType": "YulTypedName", - "src": "6187:8:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6253:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6262:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6265:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6255:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6255:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6255:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_2", - "nodeType": "YulIdentifier", - "src": "6239:8:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "6249:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "6236:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "6236:16:37" - }, - "nodeType": "YulIf", - "src": "6233:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "6278:98:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6346:9:37" - }, - { - "name": "offset_2", - "nodeType": "YulIdentifier", - "src": "6357:8:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6342:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6342:24:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "6368:7:37" - } - ], - "functionName": { - "name": "abi_decode_array_struct_Initialization_dyn_fromMemory", - "nodeType": "YulIdentifier", - "src": "6288:53:37" - }, - "nodeType": "YulFunctionCall", - "src": "6288:88:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "6278:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptrt_array$_t_struct$_Initialization_$10_memory_ptr_$dyn_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3877:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3888:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3900:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "3908:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "3916:6:37", - "type": "" - } - ], - "src": "3707:2675:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6419:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6436:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6443:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6448:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "6439:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6439:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6429:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6429:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6429:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6476:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6479:4:37", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6469:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6469:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6469:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6500:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6503:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6493:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6493:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6493:15:37" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "6387:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6551:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6568:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6575:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6580:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "6571:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6571:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6561:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6561:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6561:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6608:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6611:4:37", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6601:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6601:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6601:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6632:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6635:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6625:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6625:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6625:15:37" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "6519:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6698:88:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6729:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "6731:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "6731:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6731:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6714:5:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6725:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "6721:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6721:6:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "6711:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "6711:17:37" - }, - "nodeType": "YulIf", - "src": "6708:43:37" - }, - { - "nodeType": "YulAssignment", - "src": "6760:20:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6771:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6778:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6767:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6767:13:37" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "6760:3:37" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6680:5:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "6690:3:37", - "type": "" - } - ], - "src": "6651:135:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6823:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6840:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6847:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6852:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "6843:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6843:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6833:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6833:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6833:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6880:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6883:4:37", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6873:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6873:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6873:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6904:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6907:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6897:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6897:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6897:15:37" - } - ] - }, - "name": "panic_error_0x21", - "nodeType": "YulFunctionDefinition", - "src": "6791:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7097:229:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7114:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7125:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7107:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7107:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7107:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7148:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7159:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7144:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7144:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7164:2:37", - "type": "", - "value": "39" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7137:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7137:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7137:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7187:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7198:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7183:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7183:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a20496e636f72726563742046616365744375", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7203:34:37", - "type": "", - "value": "LibDiamondCut: Incorrect FacetCu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7176:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7176:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7176:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7258:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7269:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7254:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7254:18:37" - }, - { - "hexValue": "74416374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7274:9:37", - "type": "", - "value": "tAction" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7247:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7247:37:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7247:37:37" - }, - { - "nodeType": "YulAssignment", - "src": "7293:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7305:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7316:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7301:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7301:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7293:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7074:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7088:4:37", - "type": "" - } - ], - "src": "6923:403:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7375:60:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7392:3:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7401:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7416:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7421:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "7412:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7412:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7425:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "7408:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7408:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7397:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7397:31:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7385:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7385:44:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7385:44:37" - } - ] - }, - "name": "abi_encode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7359:5:37", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "7366:3:37", - "type": "" - } - ], - "src": "7331:104:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7489:208:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7499:26:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7519:5:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7513:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "7513:12:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7503:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7541:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7546:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7534:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7534:19:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7534:19:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7588:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7595:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7584:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7584:16:37" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7606:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7611:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7602:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7602:14:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7618:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "7562:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "7562:63:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7562:63:37" - }, - { - "nodeType": "YulAssignment", - "src": "7634:57:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7649:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7662:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7670:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7658:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7658:15:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7679:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "7675:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7675:7:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7654:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7654:29:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7645:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7645:39:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7686:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7641:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7641:50:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "7634:3:37" - } - ] - } - ] - }, - "name": "abi_encode_bytes", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7466:5:37", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "7473:3:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "7481:3:37", - "type": "" - } - ], - "src": "7440:257:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7977:1813:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7987:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7997:2:37", - "type": "", - "value": "96" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "7991:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8008:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8026:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8037:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8022:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8022:18:37" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "8012:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8056:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8067:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8049:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8049:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8049:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8079:17:37", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "8090:6:37" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "8083:3:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8105:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8125:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8119:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "8119:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "8109:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "8148:6:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8156:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8141:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8141:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8141:22:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8172:13:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8182:3:37", - "type": "", - "value": "128" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "8176:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "8194:25:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8205:9:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "8216:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8201:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8201:18:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8194:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8228:53:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8250:9:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8265:1:37", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8268:6:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "8261:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8261:14:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8246:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8246:30:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "8278:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8242:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8242:39:37" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "8232:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8290:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8300:4:37", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "8294:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8313:29:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8331:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "8339:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8327:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8327:15:37" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "8317:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8351:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8360:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "8355:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8419:1200:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8440:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8453:6:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8461:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "8449:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8449:22:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8477:3:37", - "type": "", - "value": "127" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "8473:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8473:8:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8445:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8445:37:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8433:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8433:50:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8433:50:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8496:23:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "8512:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8506:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "8506:13:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "8500:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8532:29:37", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8550:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8558:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8546:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8546:15:37" - }, - "variables": [ - { - "name": "tail_3", - "nodeType": "YulTypedName", - "src": "8536:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8581:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "8599:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8593:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "8593:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8612:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8617:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "8608:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8608:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8621:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "8604:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8604:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8589:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8589:35:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8574:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8574:51:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8574:51:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8638:38:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "8668:2:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "8672:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8664:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8664:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8658:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "8658:18:37" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "8642:12:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8732:127:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8757:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8764:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8769:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "8760:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8760:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8750:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8750:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8750:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8805:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8808:4:37", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8798:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8798:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8798:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8837:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8840:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "8830:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8830:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8830:15:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "8702:12:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8716:1:37", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "8699:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "8699:19:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "8692:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8692:27:37" - }, - "nodeType": "YulIf", - "src": "8689:170:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8883:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "8891:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8879:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8879:15:37" - }, - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "8896:12:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8872:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8872:37:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8872:37:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8922:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8932:4:37", - "type": "", - "value": "0x40" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "8926:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8949:40:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "8981:2:37" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "8985:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8977:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8977:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8971:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "8971:18:37" - }, - "variables": [ - { - "name": "memberValue0_1", - "nodeType": "YulTypedName", - "src": "8953:14:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9013:6:37" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "9021:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9009:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9009:15:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "9026:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9002:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9002:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9002:27:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9042:19:37", - "value": { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "9055:6:37" - }, - "variables": [ - { - "name": "pos_1", - "nodeType": "YulTypedName", - "src": "9046:5:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9074:37:37", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "9096:14:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9090:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "9090:21:37" - }, - "variables": [ - { - "name": "length_1", - "nodeType": "YulTypedName", - "src": "9078:8:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "9131:6:37" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "9139:8:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9124:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9124:24:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9124:24:37" - }, - { - "nodeType": "YulAssignment", - "src": "9161:24:37", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9174:6:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "9182:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9170:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9170:15:37" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9161:5:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9198:39:37", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "9218:14:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9234:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9214:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9214:23:37" - }, - "variables": [ - { - "name": "srcPtr_1", - "nodeType": "YulTypedName", - "src": "9202:8:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9250:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9261:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i_1", - "nodeType": "YulTypedName", - "src": "9254:3:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9336:175:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9361:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9378:8:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9372:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "9372:15:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9393:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9398:10:37", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "9389:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9389:20:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "9368:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9368:42:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9354:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9354:57:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9354:57:37" - }, - { - "nodeType": "YulAssignment", - "src": "9428:23:37", - "value": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9441:5:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9448:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9437:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9437:14:37" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9428:5:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9468:29:37", - "value": { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9484:8:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9494:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9480:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9480:17:37" - }, - "variableNames": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9468:8:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9286:3:37" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "9291:8:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "9283:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "9283:17:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "9301:22:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "9303:18:37", - "value": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9314:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9319:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9310:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9310:11:37" - }, - "variableNames": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9303:3:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "9279:3:37", - "statements": [] - }, - "src": "9275:236:37" - }, - { - "nodeType": "YulAssignment", - "src": "9524:15:37", - "value": { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9534:5:37" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9524:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9552:25:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "9566:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9574:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9562:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9562:15:37" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "9552:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9590:19:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9601:3:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9606:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9597:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9597:12:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9590:3:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8381:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8384:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "8378:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "8378:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "8392:18:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8394:14:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8403:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8406:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8399:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8399:9:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8394:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "8374:3:37", - "statements": [] - }, - "src": "8370:1249:37" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "9647:6:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9659:9:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9670:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9655:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9655:18:37" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "9628:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "9628:46:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9628:46:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9694:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9705:4:37", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9690:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9690:20:37" - }, - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9716:6:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9724:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9712:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9712:22:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9683:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9683:52:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9683:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "9744:40:37", - "value": { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "9769:6:37" - }, - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9777:6:37" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "9752:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "9752:32:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9744:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7930:9:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "7941:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "7949:6:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "7957:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7968:4:37", - "type": "" - } - ], - "src": "7702:2088:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9969:250:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9986:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9997:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9979:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9979:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9979:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10020:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10031:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10016:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10016:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10036:2:37", - "type": "", - "value": "60" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10009:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10009:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10009:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10059:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10070:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10055:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10055:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e6974206973206164647265737328", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10075:34:37", - "type": "", - "value": "LibDiamondCut: _init is address(" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10048:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10048:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10048:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10130:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10141:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10126:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10126:18:37" - }, - { - "hexValue": "3029206275745f63616c6c64617461206973206e6f7420656d707479", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10146:30:37", - "type": "", - "value": "0) but_calldata is not empty" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10119:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10119:58:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10119:58:37" - }, - { - "nodeType": "YulAssignment", - "src": "10186:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10198:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10209:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10194:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10194:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10186:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9946:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "9960:4:37", - "type": "" - } - ], - "src": "9795:424:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10398:251:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10415:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10426:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10408:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10408:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10408:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10449:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10460:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10445:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10445:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10465:2:37", - "type": "", - "value": "61" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10438:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10438:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10438:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10488:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10499:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10484:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10484:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d7074", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10504:34:37", - "type": "", - "value": "LibDiamondCut: _calldata is empt" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10477:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10477:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10477:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10559:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10570:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10555:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10555:18:37" - }, - { - "hexValue": "7920627574205f696e6974206973206e6f742061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10575:31:37", - "type": "", - "value": "y but _init is not address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10548:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10548:59:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10548:59:37" - }, - { - "nodeType": "YulAssignment", - "src": "10616:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10628:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10639:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10624:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10624:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10616:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10375:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10389:4:37", - "type": "" - } - ], - "src": "10224:425:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10791:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "10801:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "10821:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "10815:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "10815:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "10805:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "10863:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10871:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10859:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10859:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10878:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "10883:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "10837:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "10837:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10837:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "10899:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10910:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "10915:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10906:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10906:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "10899:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "10767:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "10772:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "10783:3:37", - "type": "" - } - ], - "src": "10654:274:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11054:98:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11071:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11082:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11064:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11064:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11064:21:37" - }, - { - "nodeType": "YulAssignment", - "src": "11094:52:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "11119:6:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11131:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11142:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11127:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11127:18:37" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "11102:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "11102:44:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11094:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11023:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "11034:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11045:4:37", - "type": "" - } - ], - "src": "10933:219:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11331:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11348:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11359:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11341:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11341:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11341:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11382:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11393:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11378:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11378:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11398:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11371:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11371:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11371:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11421:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11432:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11417:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11417:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11437:34:37", - "type": "", - "value": "LibDiamondCut: _init function re" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11410:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11410:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11410:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11492:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11503:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11488:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11488:18:37" - }, - { - "hexValue": "766572746564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11508:8:37", - "type": "", - "value": "verted" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11481:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11481:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11481:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "11526:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11538:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11549:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11534:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11534:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11526:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11308:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11322:4:37", - "type": "" - } - ], - "src": "11157:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11738:233:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11755:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11766:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11748:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11748:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11748:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11789:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11800:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11785:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11785:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11805:2:37", - "type": "", - "value": "43" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11778:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11778:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11778:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11828:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11839:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11824:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11824:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11844:34:37", - "type": "", - "value": "LibDiamondCut: No selectors in f" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11817:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11817:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11817:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11899:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11910:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11895:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11895:18:37" - }, - { - "hexValue": "6163657420746f20637574", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11915:13:37", - "type": "", - "value": "acet to cut" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11888:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11888:41:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11888:41:37" - }, - { - "nodeType": "YulAssignment", - "src": "11938:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11950:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11961:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11946:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11946:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11938:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11715:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11729:4:37", - "type": "" - } - ], - "src": "11564:407:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12150:234:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12167:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12178:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12160:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12160:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12160:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12201:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12212:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12197:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12197:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12217:2:37", - "type": "", - "value": "44" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12190:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12190:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12190:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12240:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12251:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12236:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12236:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204164642066616365742063616e27742062", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12256:34:37", - "type": "", - "value": "LibDiamondCut: Add facet can't b" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12229:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12229:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12229:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12311:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12322:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12307:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12307:18:37" - }, - { - "hexValue": "652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12327:14:37", - "type": "", - "value": "e address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12300:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12300:42:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12300:42:37" - }, - { - "nodeType": "YulAssignment", - "src": "12351:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12363:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12374:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12359:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12359:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12351:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12127:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12141:4:37", - "type": "" - } - ], - "src": "11976:408:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12563:243:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12580:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12591:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12573:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12573:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12573:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12614:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12625:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12610:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12610:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12630:2:37", - "type": "", - "value": "53" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12603:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12603:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12603:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12653:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12664:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12649:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12649:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12669:34:37", - "type": "", - "value": "LibDiamondCut: Can't add functio" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12642:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12642:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12642:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12724:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12735:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12720:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12720:18:37" - }, - { - "hexValue": "6e207468617420616c726561647920657869737473", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12740:23:37", - "type": "", - "value": "n that already exists" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12713:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12713:51:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12713:51:37" - }, - { - "nodeType": "YulAssignment", - "src": "12773:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12785:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12796:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12781:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12781:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12773:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12540:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12554:4:37", - "type": "" - } - ], - "src": "12389:417:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12857:163:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "12867:28:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12885:2:37", - "type": "", - "value": "96" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12889:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "12881:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12881:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12893:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "12877:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12877:18:37" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "12871:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "12904:29:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "12923:5:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "12930:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "12919:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12919:14:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "12908:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12961:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "12963:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "12963:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12963:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "12948:7:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "12957:2:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "12945:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "12945:15:37" - }, - "nodeType": "YulIf", - "src": "12942:41:37" - }, - { - "nodeType": "YulAssignment", - "src": "12992:22:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "13003:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13012:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12999:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12999:15:37" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "12992:3:37" - } - ] - } - ] - }, - "name": "increment_t_uint96", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "12839:5:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "12849:3:37", - "type": "" - } - ], - "src": "12811:209:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13199:246:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13216:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13227:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13209:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13209:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13209:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13250:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13261:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13246:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13246:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13266:2:37", - "type": "", - "value": "56" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13239:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13239:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13239:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13289:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13300:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13285:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13285:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13305:34:37", - "type": "", - "value": "LibDiamondCut: Can't replace fun" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13278:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13278:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13278:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13360:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13371:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13356:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13356:18:37" - }, - { - "hexValue": "6374696f6e20776974682073616d652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13376:26:37", - "type": "", - "value": "ction with same function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13349:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13349:54:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13349:54:37" - }, - { - "nodeType": "YulAssignment", - "src": "13412:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13424:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13435:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13420:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13420:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13412:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13176:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13190:4:37", - "type": "" - } - ], - "src": "13025:420:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13624:244:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13641:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13652:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13634:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13634:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13634:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13675:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13686:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13671:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13671:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13691:2:37", - "type": "", - "value": "54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13664:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13664:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13664:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13714:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13725:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13710:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13710:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13730:34:37", - "type": "", - "value": "LibDiamondCut: Remove facet addr" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13703:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13703:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13703:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13785:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13796:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13781:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13781:18:37" - }, - { - "hexValue": "657373206d7573742062652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13801:24:37", - "type": "", - "value": "ess must be address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13774:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13774:52:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13774:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "13835:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13847:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13858:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13843:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13843:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13835:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13601:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13615:4:37", - "type": "" - } - ], - "src": "13450:418:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14047:245:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14064:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14075:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14057:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14057:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14057:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14098:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14109:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14094:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14094:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14114:2:37", - "type": "", - "value": "55" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14087:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14087:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14087:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14137:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14148:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14133:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14133:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e63", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14153:34:37", - "type": "", - "value": "LibDiamondCut: Can't remove func" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14126:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14126:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14126:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14208:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14219:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14204:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14204:18:37" - }, - { - "hexValue": "74696f6e207468617420646f65736e2774206578697374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14224:25:37", - "type": "", - "value": "tion that doesn't exist" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14197:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14197:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14197:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "14259:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14271:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14282:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14267:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14267:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14259:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14024:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "14038:4:37", - "type": "" - } - ], - "src": "13873:419:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14471:236:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14488:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14499:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14481:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14481:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14481:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14522:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14533:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14518:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14518:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14538:2:37", - "type": "", - "value": "46" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14511:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14511:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14511:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14561:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14572:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14557:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14557:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d75", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14577:34:37", - "type": "", - "value": "LibDiamondCut: Can't remove immu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14550:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14550:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14550:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14632:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14643:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14628:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14628:18:37" - }, - { - "hexValue": "7461626c652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14648:16:37", - "type": "", - "value": "table function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14621:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14621:44:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14621:44:37" - }, - { - "nodeType": "YulAssignment", - "src": "14674:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14686:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14697:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14682:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14682:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14674:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14448:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "14462:4:37", - "type": "" - } - ], - "src": "14297:410:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14761:76:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "14783:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "14785:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "14785:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14785:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "14777:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "14780:1:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "14774:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "14774:8:37" - }, - "nodeType": "YulIf", - "src": "14771:34:37" - }, - { - "nodeType": "YulAssignment", - "src": "14814:17:37", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "14826:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "14829:1:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "14822:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14822:9:37" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "14814:4:37" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "14743:1:37", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "14746:1:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "14752:4:37", - "type": "" - } - ], - "src": "14712:125:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14874:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14891:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14898:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14903:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "14894:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14894:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14884:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14884:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14884:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14931:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14934:4:37", - "type": "", - "value": "0x31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14924:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14924:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14924:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14955:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14958:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "14948:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14948:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14948:15:37" - } - ] - }, - "name": "panic_error_0x31", - "nodeType": "YulFunctionDefinition", - "src": "14842:127:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n let value_1 := mload(offset)\n if iszero(eq(value_1, and(value_1, sub(shl(168, 1), 1)))) { revert(0, 0) }\n value := and(value_1, sub(shl(160, 1), 1))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_3428() -> memPtr\n {\n memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(0x40, newFreePtr)\n }\n function allocate_memory_3429() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 96)\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, sub(shl(64, 1), 1)), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_array_struct_FacetCut_dyn(length) -> size\n {\n if gt(length, sub(shl(64, 1), 1)) { panic_error_0x41() }\n size := add(shl(5, length), 0x20)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_array_struct_Initialization_dyn_fromMemory(offset, end) -> array\n {\n let _1 := 0x1f\n if iszero(slt(add(offset, _1), end)) { revert(0, 0) }\n let _2 := mload(offset)\n let _3 := 0x20\n let dst := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_2))\n let dst_1 := dst\n mstore(dst, _2)\n dst := add(dst, _3)\n let srcEnd := add(add(offset, shl(5, _2)), _3)\n if gt(srcEnd, end) { revert(0, 0) }\n let src := add(offset, _3)\n for { } lt(src, srcEnd) { src := add(src, _3) }\n {\n let innerOffset := mload(src)\n let _4 := sub(shl(64, 1), 1)\n if gt(innerOffset, _4)\n {\n let _5 := 0\n revert(_5, _5)\n }\n let _6 := add(offset, innerOffset)\n let _7 := 0x40\n let _8 := not(31)\n if slt(add(sub(end, _6), _8), _7)\n {\n let _9 := 0\n revert(_9, _9)\n }\n let value := allocate_memory_3428()\n mstore(value, abi_decode_address_fromMemory(add(_6, _3)))\n let offset_1 := mload(add(_6, _7))\n if gt(offset_1, _4)\n {\n let _10 := 0\n revert(_10, _10)\n }\n let _11 := add(_6, offset_1)\n if iszero(slt(add(_11, 63), end))\n {\n let _12 := 0\n revert(_12, _12)\n }\n let _13 := mload(add(_11, _3))\n if gt(_13, _4) { panic_error_0x41() }\n let array_1 := allocate_memory(add(and(add(_13, _1), _8), _3))\n mstore(array_1, _13)\n if gt(add(add(_11, _13), _7), end)\n {\n let _14 := 0\n revert(_14, _14)\n }\n copy_memory_to_memory(add(_11, _7), add(array_1, _3), _13)\n mstore(add(value, _3), array_1)\n mstore(dst, value)\n dst := add(dst, _3)\n }\n array := dst_1\n }\n function abi_decode_tuple_t_addresst_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptrt_array$_t_struct$_Initialization_$10_memory_ptr_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n let offset := mload(add(headStart, 32))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n let dst := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_3))\n let dst_1 := dst\n mstore(dst, _3)\n dst := add(dst, 32)\n let srcEnd := add(add(_2, shl(5, _3)), 32)\n if gt(srcEnd, dataEnd) { revert(0, 0) }\n let src := add(_2, 32)\n for { } lt(src, srcEnd) { src := add(src, 32) }\n {\n let innerOffset := mload(src)\n if gt(innerOffset, _1) { revert(0, 0) }\n let _4 := add(_2, innerOffset)\n if slt(add(sub(dataEnd, _4), not(31)), 96) { revert(0, 0) }\n let value := allocate_memory_3429()\n mstore(value, abi_decode_address_fromMemory(add(_4, 32)))\n let value_1 := mload(add(_4, 64))\n if iszero(lt(value_1, 3)) { revert(0, 0) }\n mstore(add(value, 32), value_1)\n let offset_1 := mload(add(_4, 96))\n if gt(offset_1, _1) { revert(0, 0) }\n let _5 := add(_4, offset_1)\n if iszero(slt(add(_5, 63), dataEnd)) { revert(0, 0) }\n let _6 := mload(add(_5, 32))\n let dst_2 := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_6))\n let dst_3 := dst_2\n mstore(dst_2, _6)\n dst_2 := add(dst_2, 32)\n let srcEnd_1 := add(add(_5, shl(5, _6)), 64)\n if gt(srcEnd_1, dataEnd) { revert(0, 0) }\n let src_1 := add(_5, 64)\n for { } lt(src_1, srcEnd_1) { src_1 := add(src_1, 32) }\n {\n let value_2 := mload(src_1)\n if iszero(eq(value_2, and(value_2, shl(224, 0xffffffff)))) { revert(0, 0) }\n mstore(dst_2, value_2)\n dst_2 := add(dst_2, 32)\n }\n mstore(add(value, 64), dst_3)\n mstore(dst, value)\n dst := add(dst, 32)\n }\n value1 := dst_1\n let offset_2 := mload(add(headStart, 64))\n if gt(offset_2, _1) { revert(0, 0) }\n value2 := abi_decode_array_struct_Initialization_dyn_fromMemory(add(headStart, offset_2), dataEnd)\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, not(0)) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function panic_error_0x21()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 39)\n mstore(add(headStart, 64), \"LibDiamondCut: Incorrect FacetCu\")\n mstore(add(headStart, 96), \"tAction\")\n tail := add(headStart, 128)\n }\n function abi_encode_address(value, pos)\n {\n mstore(pos, and(value, sub(shl(160, 1), 1)))\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n let _1 := 96\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 128\n pos := add(headStart, _2)\n let tail_2 := add(add(headStart, shl(5, length)), _2)\n let _3 := 0x20\n let srcPtr := add(value0, _3)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(127)))\n let _4 := mload(srcPtr)\n let tail_3 := add(tail_2, _1)\n mstore(tail_2, and(mload(_4), sub(shl(160, 1), 1)))\n let memberValue0 := mload(add(_4, _3))\n if iszero(lt(memberValue0, 3))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n mstore(add(tail_2, _3), memberValue0)\n let _5 := 0x40\n let memberValue0_1 := mload(add(_4, _5))\n mstore(add(tail_2, _5), _1)\n let pos_1 := tail_3\n let length_1 := mload(memberValue0_1)\n mstore(tail_3, length_1)\n pos_1 := add(tail_2, _2)\n let srcPtr_1 := add(memberValue0_1, _3)\n let i_1 := 0\n for { } lt(i_1, length_1) { i_1 := add(i_1, 1) }\n {\n mstore(pos_1, and(mload(srcPtr_1), shl(224, 0xffffffff)))\n pos_1 := add(pos_1, _3)\n srcPtr_1 := add(srcPtr_1, _3)\n }\n tail_2 := pos_1\n srcPtr := add(srcPtr, _3)\n pos := add(pos, _3)\n }\n abi_encode_address(value1, add(headStart, _3))\n mstore(add(headStart, 0x40), sub(tail_2, headStart))\n tail := abi_encode_bytes(value2, tail_2)\n }\n function abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 60)\n mstore(add(headStart, 64), \"LibDiamondCut: _init is address(\")\n mstore(add(headStart, 96), \"0) but_calldata is not empty\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 61)\n mstore(add(headStart, 64), \"LibDiamondCut: _calldata is empt\")\n mstore(add(headStart, 96), \"y but _init is not address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"LibDiamondCut: _init function re\")\n mstore(add(headStart, 96), \"verted\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 43)\n mstore(add(headStart, 64), \"LibDiamondCut: No selectors in f\")\n mstore(add(headStart, 96), \"acet to cut\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"LibDiamondCut: Add facet can't b\")\n mstore(add(headStart, 96), \"e address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 53)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't add functio\")\n mstore(add(headStart, 96), \"n that already exists\")\n tail := add(headStart, 128)\n }\n function increment_t_uint96(value) -> ret\n {\n let _1 := sub(shl(96, 1), 1)\n let value_1 := and(value, _1)\n if eq(value_1, _1) { panic_error_0x11() }\n ret := add(value_1, 1)\n }\n function abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 56)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't replace fun\")\n mstore(add(headStart, 96), \"ction with same function\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 54)\n mstore(add(headStart, 64), \"LibDiamondCut: Remove facet addr\")\n mstore(add(headStart, 96), \"ess must be address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 55)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove func\")\n mstore(add(headStart, 96), \"tion that doesn't exist\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 46)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove immu\")\n mstore(add(headStart, 96), \"table function\")\n tail := add(headStart, 128)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y) { panic_error_0x11() }\n diff := sub(x, y)\n }\n function panic_error_0x31()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x31)\n revert(0, 0x24)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0x322B CODESIZE SUB DUP1 PUSH3 0x322B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x134D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO PUSH3 0x4C JUMPI PUSH3 0x4C DUP4 PUSH3 0xF7 PUSH1 0x20 SHL PUSH3 0x107 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x74 DUP3 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH3 0x17B PUSH1 0x20 SHL PUSH3 0x1C1 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH3 0xED JUMPI PUSH3 0xD8 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x9A JUMPI PUSH3 0x9A PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0xBB JUMPI PUSH3 0xBB PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH3 0x3D9 PUSH1 0x20 SHL PUSH3 0x405 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 PUSH3 0xE4 DUP2 PUSH3 0x154D JUMP JUMPDEST SWAP2 POP POP PUSH3 0x77 JUMP JUMPDEST POP POP POP POP PUSH3 0x174A JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x317F DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SWAP4 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH3 0x38A JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x19F JUMPI PUSH3 0x19F PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x1C3 JUMPI PUSH3 0x1C3 PUSH3 0x156B JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x1D8 JUMPI PUSH3 0x1D8 PUSH3 0x156B JUMP JUMPDEST EQ ISZERO PUSH3 0x237 JUMPI PUSH3 0x231 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x1F8 JUMPI PUSH3 0x1F8 PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x219 JUMPI PUSH3 0x219 PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH3 0x5FE PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x374 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x24E JUMPI PUSH3 0x24E PUSH3 0x156B JUMP JUMPDEST EQ ISZERO PUSH3 0x2A7 JUMPI PUSH3 0x231 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x26E JUMPI PUSH3 0x26E PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x28F JUMPI PUSH3 0x28F PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH3 0x888 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x2BE JUMPI PUSH3 0x2BE PUSH3 0x156B JUMP JUMPDEST EQ ISZERO PUSH3 0x317 JUMPI PUSH3 0x231 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x2DE JUMPI PUSH3 0x2DE PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x2FF JUMPI PUSH3 0x2FF PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH3 0xB1E PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH7 0x3A20B1BA34B7B7 PUSH1 0xC9 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP DUP1 PUSH3 0x381 DUP2 PUSH3 0x154D JUMP JUMPDEST SWAP2 POP POP PUSH3 0x17E JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH3 0x3C0 SWAP4 SWAP3 SWAP2 SWAP1 PUSH3 0x15AF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH3 0x3D4 DUP3 DUP3 PUSH3 0x3D9 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0x463 JUMPI DUP1 MLOAD ISZERO PUSH3 0x45F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH3 0x4DC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ PUSH3 0x512 JUMPI PUSH3 0x512 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x319F PUSH1 0x28 SWAP2 CODECOPY PUSH3 0xC7E JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD PUSH3 0x52F SWAP2 SWAP1 PUSH3 0x16B6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x56C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x571 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH3 0x5F8 JUMPI DUP1 MLOAD ISZERO PUSH3 0x5A0 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x36B SWAP2 SWAP1 PUSH3 0x16D4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1D995C9D1959 PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH3 0x654 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x317F DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH3 0x6C0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x31C7 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x652061646472657373283029 PUSH1 0xA0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP2 AND PUSH3 0x6F6 JUMPI PUSH3 0x6F6 DUP3 DUP6 PUSH3 0xCA2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH3 0x881 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x71A JUMPI PUSH3 0x71A PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH3 0x7C2 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E207468617420616C7265616479206578697374730000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND OR SWAP1 SSTORE DUP4 PUSH3 0x866 DUP2 PUSH3 0x16F0 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH3 0x878 SWAP1 PUSH3 0x154D JUMP JUMPDEST SWAP2 POP POP PUSH3 0x6F9 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH3 0x8DE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x317F DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH3 0x94A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x31C7 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH12 0x652061646472657373283029 PUSH1 0xA0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP2 AND PUSH3 0x980 JUMPI PUSH3 0x980 DUP3 DUP6 PUSH3 0xCA2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH3 0x881 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x9A4 JUMPI PUSH3 0x9A4 PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 EQ ISZERO PUSH3 0xA52 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH3 0xA5F DUP6 DUP3 DUP5 PUSH3 0xD0F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND OR SWAP1 SSTORE DUP4 PUSH3 0xB03 DUP2 PUSH3 0x16F0 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH3 0xB15 SWAP1 PUSH3 0x154D JUMP JUMPDEST SWAP2 POP POP PUSH3 0x983 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH3 0xB74 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x320B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH11 0x1858D95D081D1BC818DD5D PUSH1 0xAA SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x317F DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO PUSH3 0xC03 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x657373206D757374206265206164647265737328302900000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH3 0x5F8 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xC27 JUMPI PUSH3 0xC27 PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH3 0xC66 DUP5 DUP3 DUP5 PUSH3 0xD0F JUMP JUMPDEST POP POP DUP1 DUP1 PUSH3 0xC75 SWAP1 PUSH3 0x154D JUMP JUMPDEST SWAP2 POP POP PUSH3 0xC06 JUMP JUMPDEST DUP2 EXTCODESIZE DUP2 DUP2 PUSH3 0x5F8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x36B SWAP2 SWAP1 PUSH3 0x16D4 JUMP JUMPDEST PUSH3 0xCC7 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x31E7 PUSH1 0x24 SWAP2 CODECOPY PUSH3 0xC7E JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH3 0xD8D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ ISZERO PUSH3 0xDFF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH14 0x3A30B1363290333AB731BA34B7B7 PUSH1 0x91 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x36B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xA0 SHL SWAP1 SWAP2 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB AND SWAP3 SWAP2 PUSH3 0xE50 SWAP2 PUSH3 0x171A JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH3 0xF49 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH3 0xE89 JUMPI PUSH3 0xE89 PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH3 0xEDD JUMPI PUSH3 0xEDD PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0xA0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH3 0xF75 JUMPI PUSH3 0xF75 PUSH3 0x1734 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH1 0x0 NOT SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE DUP1 PUSH3 0x881 JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH3 0xFD7 SWAP1 PUSH1 0x1 SWAP1 PUSH3 0x171A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH3 0x108D JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH3 0x101A JUMPI PUSH3 0x101A PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH3 0x104E JUMPI PUSH3 0x104E PUSH3 0x1521 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH3 0x10A3 JUMPI PUSH3 0x10A3 PUSH3 0x1734 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x1151 JUMPI PUSH3 0x1151 PUSH3 0x1116 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x1151 JUMPI PUSH3 0x1151 PUSH3 0x1116 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x11A7 JUMPI PUSH3 0x11A7 PUSH3 0x1116 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH3 0x11CB JUMPI PUSH3 0x11CB PUSH3 0x1116 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x11F2 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x11D8 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x5F8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F DUP4 DUP2 DUP5 ADD SLT PUSH3 0x1217 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x20 PUSH3 0x1230 PUSH3 0x122A DUP4 PUSH3 0x11AF JUMP JUMPDEST PUSH3 0x117C JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x5 SWAP3 SWAP1 SWAP3 SHL DUP6 ADD DUP2 ADD SWAP2 DUP2 DUP2 ADD SWAP1 DUP8 DUP5 GT ISZERO PUSH3 0x1250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP8 ADD JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x1341 JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1276 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP1 DUP10 ADD SWAP1 PUSH1 0x40 PUSH1 0x1F NOT DUP4 DUP14 SUB DUP2 ADD DUP3 SGT ISZERO PUSH3 0x1292 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH3 0x129C PUSH3 0x112C JUMP JUMPDEST PUSH3 0x12A9 DUP10 DUP7 ADD PUSH3 0x10EC JUMP JUMPDEST DUP2 MSTORE DUP3 DUP6 ADD MLOAD DUP5 DUP2 GT ISZERO PUSH3 0x12BE JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP1 DUP7 ADD SWAP6 POP POP DUP14 PUSH1 0x3F DUP7 ADD SLT PUSH3 0x12D5 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP9 DUP6 ADD MLOAD DUP5 DUP2 GT ISZERO PUSH3 0x12EC JUMPI PUSH3 0x12EC PUSH3 0x1116 JUMP JUMPDEST PUSH3 0x12FD DUP11 DUP5 DUP15 DUP5 ADD AND ADD PUSH3 0x117C JUMP JUMPDEST SWAP5 POP DUP1 DUP6 MSTORE DUP15 DUP5 DUP3 DUP9 ADD ADD GT ISZERO PUSH3 0x1317 JUMPI PUSH1 0x0 SWAP3 POP DUP3 DUP4 REVERT JUMPDEST PUSH3 0x1328 DUP2 DUP12 DUP8 ADD DUP7 DUP10 ADD PUSH3 0x11D5 JUMP JUMPDEST POP DUP1 DUP10 ADD SWAP4 SWAP1 SWAP4 MSTORE POP POP DUP5 MSTORE POP SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH3 0x1254 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x1363 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x136E DUP5 PUSH3 0x10EC JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x138C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x13A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x13B2 PUSH3 0x122A DUP3 PUSH3 0x11AF JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP3 POP DUP10 DUP4 GT ISZERO PUSH3 0x13D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP6 ADD JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x14ED JUMPI DUP1 MLOAD DUP6 DUP2 GT ISZERO PUSH3 0x13F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 ADD PUSH1 0x60 DUP2 DUP14 SUB PUSH1 0x1F NOT ADD SLT ISZERO PUSH3 0x140A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x1414 PUSH3 0x1157 JUMP JUMPDEST PUSH3 0x1422 PUSH1 0x20 DUP4 ADD PUSH3 0x10EC JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x3 DUP2 LT PUSH3 0x1437 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD DUP8 DUP2 GT ISZERO PUSH3 0x144F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP4 ADD SWAP3 POP POP DUP13 PUSH1 0x3F DUP4 ADD SLT PUSH3 0x1465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD PUSH3 0x1479 PUSH3 0x122A DUP3 PUSH3 0x11AF JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH1 0x5 SWAP2 SWAP1 SWAP2 SHL DUP4 ADD PUSH1 0x40 ADD SWAP1 PUSH1 0x20 DUP2 ADD SWAP1 DUP16 DUP4 GT ISZERO PUSH3 0x149B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP6 ADD SWAP5 POP JUMPDEST DUP3 DUP6 LT ISZERO PUSH3 0x14D6 JUMPI DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT DUP2 AND DUP2 EQ PUSH3 0x14C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x14A2 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE POP POP DUP5 MSTORE POP PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH3 0x13DA JUMP JUMPDEST POP PUSH1 0x40 DUP10 ADD MLOAD SWAP1 SWAP7 POP SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH3 0x1508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x1517 DUP7 DUP3 DUP8 ADD PUSH3 0x1204 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x0 NOT DUP3 EQ ISZERO PUSH3 0x1564 JUMPI PUSH3 0x1564 PUSH3 0x1537 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH3 0x159B DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH3 0x11D5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x1684 JUMPI DUP10 DUP5 SUB PUSH1 0x7F NOT ADD DUP7 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE DUP4 DUP2 ADD MLOAD DUP10 DUP7 ADD SWAP1 PUSH1 0x3 DUP2 LT PUSH3 0x1620 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH3 0x166E JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH3 0x1642 JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x15D8 JUMP JUMPDEST POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH3 0x16A8 DUP2 DUP10 PUSH3 0x1581 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x16CA DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x11D5 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH3 0x16E9 PUSH1 0x20 DUP4 ADD DUP5 PUSH3 0x1581 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB DUP3 DUP2 AND DUP1 DUP3 EQ ISZERO PUSH3 0x1710 JUMPI PUSH3 0x1710 PUSH3 0x1537 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH3 0x172F JUMPI PUSH3 0x172F PUSH3 0x1537 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1A25 DUP1 PUSH3 0x175A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0xB JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xE3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4469616D6F6E643A2046756E6374696F6E20646F6573206E6F74206578697374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x102 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E1 JUMPI PUSH2 0x1E1 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x202 JUMPI PUSH2 0x202 PUSH2 0x1686 JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x214 JUMPI PUSH2 0x214 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x263 JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x22F JUMPI PUSH2 0x22F PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x24D JUMPI PUSH2 0x24D PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x6BE JUMP JUMPDEST PUSH2 0x3A7 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x277 JUMPI PUSH2 0x277 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x2C1 JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x292 JUMPI PUSH2 0x292 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2B0 JUMPI PUSH2 0x2B0 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xA71 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2D5 JUMPI PUSH2 0x2D5 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x31F JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2F0 JUMPI PUSH2 0x2F0 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x30E JUMPI PUSH2 0x30E PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xE2E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74416374696F6E00000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP DUP1 PUSH2 0x3B2 DUP2 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1C4 JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1793 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x400 DUP3 DUP3 PUSH2 0x405 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x4B3 JUMPI DUP1 MLOAD ISZERO PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x544 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x583 JUMPI PUSH2 0x583 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19A4 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x101B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x5AB SWAP2 SWAP1 PUSH2 0x18FB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x5E6 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5EB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x6B8 JUMPI DUP1 MLOAD ISZERO PUSH2 0x630 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xDA SWAP2 SWAP1 PUSH2 0x1917 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7665727465640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x74F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x813 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x858 JUMPI PUSH2 0x858 DUP3 DUP6 PUSH2 0x1056 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xA6A JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x878 JUMPI PUSH2 0x878 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x95D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E207468617420616C7265616479206578697374730000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xA52 DUP2 PUSH2 0x1931 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xA62 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x85B JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xBC6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xC0B JUMPI PUSH2 0xC0B DUP3 DUP6 PUSH2 0x1056 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xA6A JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC2B JUMPI PUSH2 0xC2B PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 EQ ISZERO PUSH2 0xD16 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH2 0xD21 DUP6 DUP3 DUP5 PUSH2 0x10E5 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xE16 DUP2 PUSH2 0x1931 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xE26 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC0E JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xEBF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO PUSH2 0xF84 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x657373206D757374206265206164647265737328302900000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x6B8 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xFA4 JUMPI PUSH2 0xFA4 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1006 DUP5 DUP3 DUP5 PUSH2 0x10E5 JUMP JUMPDEST POP POP DUP1 DUP1 PUSH2 0x1013 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xF87 JUMP JUMPDEST DUP2 EXTCODESIZE DUP2 DUP2 PUSH2 0x6B8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xDA SWAP2 SWAP1 PUSH2 0x1917 JUMP JUMPDEST PUSH2 0x1078 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19CC PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x101B JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x1188 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ ISZERO PUSH2 0x122E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7461626C652066756E6374696F6E000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP2 DIV PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 PUSH2 0x12B8 SWAP2 PUSH2 0x195D JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0x13FF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x12FA JUMPI PUSH2 0x12FA PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x1358 JUMPI PUSH2 0x1358 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x1435 JUMPI PUSH2 0x1435 PUSH2 0x1974 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE DUP1 PUSH2 0xA6A JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x14CA SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x195D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x15B8 JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1516 JUMPI PUSH2 0x1516 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1554 JUMPI PUSH2 0x1554 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0x15CB JUMPI PUSH2 0x15CB PUSH2 0x1974 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1716 JUMPI PUSH2 0x1716 PUSH2 0x16B5 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1738 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1720 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x6B8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1761 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x171D JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x18BE JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP11 DUP6 SUB ADD DUP7 MSTORE DUP2 MLOAD DUP9 DUP6 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP5 DUP3 ADD MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x1845 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x18A9 JUMPI DUP4 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x1867 JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x17BC JUMP JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x18ED DUP2 DUP10 PUSH2 0x1749 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x190D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x171D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x192A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1749 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x1953 JUMPI PUSH2 0x1953 PUSH2 0x16B5 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x196F JUMPI PUSH2 0x196F PUSH2 0x16B5 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2647472 PUSH16 0x6E58221220BDDC11B0A43D16AA15C78F SWAP6 CALLVALUE 0xF7 0x27 0x5D 0x2D SWAP9 DUP11 0xB8 PUSH15 0x49A953FCE3E4BCD0367F1164736F6C PUSH4 0x4300080B STOP CALLER 0xC8 0xFC 0xAD DUP14 0xB8 0x4D EXTCODECOPY 0xC1 DUP12 0x4C COINBASE NATIVEFREEZE MLOAD 0xEA 0xE 0xE6 PUSH14 0xD599CDE068D998E57D5E09332C13 SHR 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204164642066616365742063616E277420624C69 PUSH3 0x446961 PUSH14 0x6F6E644375743A204E6577206661 PUSH4 0x65742068 PUSH2 0x7320 PUSH15 0x6F20636F64654C69624469616D6F6E PUSH5 0x4375743A20 0x4E PUSH16 0x2073656C6563746F727320696E206600 ", - "sourceMap": "509:2322:0:-:0;;;1023:522;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1196:28:0;;;1192:102;;1240:43;1268:14;1240:27;;;;;:43;;:::i;:::-;1304:50;1326:11;1347:1;1304:50;;;;;;;;;;;;:21;;;;;:50;;:::i;:::-;1370:9;1365:174;1389:16;:23;1385:1;:27;1365:174;;;1433:95;1465:16;1482:1;1465:19;;;;;;;;:::i;:::-;;;;;;;:32;;;1499:16;1516:1;1499:19;;;;;;;;:::i;:::-;;;;;;;:28;;;1433:31;;;;;:95;;:::i;:::-;1414:3;;;;:::i;:::-;;;;1365:174;;;;1023:522;;;509:2322;;1851:264:11;1993:16;;;-1:-1:-1;;;;;;2019:28:11;;-1:-1:-1;;;;;2019:28:11;;;;;;;;;2062:46;;-1:-1:-1;;;;;;;;;;;492:45:11;1993:16;;;;;;2062:46;;1915:25;;2062:46;1905:210;;1851:264;:::o;2563:1067::-;2719:18;2714:806;2752:11;:18;2739:10;:31;2714:806;;;2800:33;2836:11;2848:10;2836:23;;;;;;;;:::i;:::-;;;;;;;:30;;;2800:66;;2894:30;2884:40;;;;;;;;:::i;:::-;:6;:40;;;;;;;;:::i;:::-;;2880:630;;;2944:93;2957:11;2969:10;2957:23;;;;;;;;:::i;:::-;;;;;;;:36;;;2995:11;3007:10;2995:23;;;;;;;;:::i;:::-;;;;;;;:41;;;2944:12;;;:93;;:::i;:::-;2880:630;;;3072:34;3062:6;:44;;;;;;;;:::i;:::-;;3058:452;;;3126:97;3143:11;3155:10;3143:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3181:11;3193:10;3181:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3126:16;;;:97;;:::i;3058:452::-;3258:33;3248:6;:43;;;;;;;;:::i;:::-;;3244:266;;;3311:96;3327:11;3339:10;3327:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3365:11;3377:10;3365:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3311:15;;;:96;;:::i;3244:266::-;3446:49;;-1:-1:-1;;;3446:49:11;;7125:2:37;3446:49:11;;;7107:21:37;7164:2;7144:18;;;7137:30;7203:34;7183:18;;;7176:62;-1:-1:-1;;;7254:18:37;;;7247:37;7301:19;;3446:49:11;;;;;;;;3244:266;-1:-1:-1;2772:12:11;;;;:::i;:::-;;;;2714:806;;;;3534:41;3545:11;3558:5;3565:9;3534:41;;;;;;;;:::i;:::-;;;;;;;;3585:38;3606:5;3613:9;3585:20;:38::i;:::-;2563:1067;;;:::o;9541:871::-;-1:-1:-1;;;;;9633:19:11;;9629:777;;9676:16;;:21;9668:94;;;;-1:-1:-1;;;9668:94:11;;9997:2:37;9668:94:11;;;9979:21:37;10036:2;10016:18;;;10009:30;10075:34;10055:18;;;10048:62;10146:30;10126:18;;;10119:58;10194:19;;9668:94:11;9795:424:37;9668:94:11;9541:871;;:::o;9629:777::-;9820:1;9801:9;:16;:20;9793:94;;;;-1:-1:-1;;;9793:94:11;;10426:2:37;9793:94:11;;;10408:21:37;10465:2;10445:18;;;10438:30;10504:34;10484:18;;;10477:62;10575:31;10555:18;;;10548:59;10624:19;;9793:94:11;10224:425:37;9793:94:11;-1:-1:-1;;;;;9905:22:11;;9922:4;9905:22;9901:134;;9947:73;9970:5;9947:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;10049:12;10063:18;10085:5;-1:-1:-1;;;;;10085:18:11;10104:9;10085:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10048:66;;;;10133:7;10128:268;;10164:12;;:16;10160:222;;10261:5;10247:21;;-1:-1:-1;;;10247:21:11;;;;;;;;:::i;10160:222::-;10315:48;;-1:-1:-1;;;10315:48:11;;11359:2:37;10315:48:11;;;11341:21:37;11398:2;11378:18;;;11371:30;11437:34;11417:18;;;11410:62;-1:-1:-1;;;11488:18:37;;;11481:36;11534:19;;10315:48:11;11157:402:37;10160:222:11;9779:627;;9541:871;;:::o;3636:1089::-;3772:1;3744:18;:25;:29;3736:85;;;;-1:-1:-1;;;3736:85:11;;11766:2:37;3736:85:11;;;11748:21:37;11805:2;11785:18;;;11778:30;-1:-1:-1;;;;;;;;;;;11824:18:37;;;11817:62;-1:-1:-1;;;11895:18:37;;;11888:41;11946:19;;3736:85:11;11564:407:37;3736:85:11;-1:-1:-1;;;;;;;;;;;;;;;;3901:27:11;;3893:84;;;;-1:-1:-1;;;3893:84:11;;12178:2:37;3893:84:11;;;12160:21:37;12217:2;12197:18;;;12190:30;-1:-1:-1;;;;;;;;;;;12236:18:37;;;12229:62;-1:-1:-1;;;12307:18:37;;;12300:42;12359:19;;3893:84:11;11976:408:37;3893:84:11;-1:-1:-1;;;;;4020:40:11;;3987:23;4020:40;;;:25;;;:40;;;;;:65;-1:-1:-1;;;;;4154:21:11;;4150:91;;4191:27;4200:2;4204:13;4191:8;:27::i;:::-;4255:21;4250:469;4294:18;:25;4278:13;:41;4250:469;;;4352:15;4370:18;4389:13;4370:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;4443:39:11;;4417:23;4443:39;;;;;;;;;;;:52;4370:33;;-1:-1:-1;;;;;;4443:52:11;4517:29;;4509:95;;;;-1:-1:-1;;;4509:95:11;;12591:2:37;4509:95:11;;;12573:21:37;12630:2;12610:18;;;12603:30;12669:34;12649:18;;;12642:62;12740:23;12720:18;;;12713:51;12781:19;;4509:95:11;12389:417:37;4509:95:11;-1:-1:-1;;;;;;7084:40:11;;:29;:40;;;;;;;;;;;:85;;-1:-1:-1;;;;;7084:85:11;;;-1:-1:-1;;;;;;;;7084:85:11;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;-1:-1:-1;;;;;;7263:69:11;;;;4690:18;;;;:::i;:::-;;;;4338:381;;4321:15;;;;;:::i;:::-;;;;4250:469;;;;3726:999;;3636:1089;;:::o;4731:1138::-;4871:1;4843:18;:25;:29;4835:85;;;;-1:-1:-1;;;4835:85:11;;11766:2:37;4835:85:11;;;11748:21:37;11805:2;11785:18;;;11778:30;-1:-1:-1;;;;;;;;;;;11824:18:37;;;11817:62;-1:-1:-1;;;11895:18:37;;;11888:41;11946:19;;4835:85:11;11564:407:37;4835:85:11;-1:-1:-1;;;;;;;;;;;;;;;;4992:27:11;;4984:84;;;;-1:-1:-1;;;4984:84:11;;12178:2:37;4984:84:11;;;12160:21:37;12217:2;12197:18;;;12190:30;-1:-1:-1;;;;;;;;;;;12236:18:37;;;12229:62;-1:-1:-1;;;12307:18:37;;;12300:42;12359:19;;4984:84:11;11976:408:37;4984:84:11;-1:-1:-1;;;;;5111:40:11;;5078:23;5111:40;;;:25;;;:40;;;;;:65;-1:-1:-1;;;;;5245:21:11;;5241:79;;5282:27;5291:2;5295:13;5282:8;:27::i;:::-;5334:21;5329:534;5373:18;:25;5357:13;:41;5329:534;;;5431:15;5449:18;5468:13;5449:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;5522:39:11;;5496:23;5522:39;;;;;;;;;;;:52;5449:33;;-1:-1:-1;;;;;;5522:52:11;;;;5596:32;;;;;5588:101;;;;-1:-1:-1;;;5588:101:11;;13227:2:37;5588:101:11;;;13209:21:37;13266:2;13246:18;;;13239:30;13305:34;13285:18;;;13278:62;13376:26;13356:18;;;13349:54;13420:19;;5588:101:11;13025:420:37;5588:101:11;5703:45;5718:2;5722:15;5739:8;5703:14;:45::i;:::-;-1:-1:-1;;;;;;7084:40:11;;:29;:40;;;;;;;;;;;:85;;-1:-1:-1;;;;;7084:85:11;;;-1:-1:-1;;;;;;;;7084:85:11;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;-1:-1:-1;;;;;;7263:69:11;;;;5834:18;;;;:::i;:::-;;;;5417:446;;5400:15;;;;;:::i;:::-;;;;5329:534;;5875:742;6014:1;5986:18;:25;:29;5978:85;;;;-1:-1:-1;;;5978:85:11;;11766:2:37;5978:85:11;;;11748:21:37;11805:2;11785:18;;;11778:30;-1:-1:-1;;;;;;;;;;;11824:18:37;;;11817:62;-1:-1:-1;;;11895:18:37;;;11888:41;11946:19;;5978:85:11;11564:407:37;5978:85:11;-1:-1:-1;;;;;;;;;;;;;;;;6200:27:11;;;6192:94;;;;-1:-1:-1;;;6192:94:11;;13652:2:37;6192:94:11;;;13634:21:37;13691:2;13671:18;;;13664:30;13730:34;13710:18;;;13703:62;13801:24;13781:18;;;13774:52;13843:19;;6192:94:11;13450:418:37;6192:94:11;6301:21;6296:315;6340:18;:25;6324:13;:41;6296:315;;;6398:15;6416:18;6435:13;6416:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;;6489:39:11;;6463:23;6489:39;;;;;;;;;;;:52;6416:33;;-1:-1:-1;;;;;;6489:52:11;6555:45;6489:2;:52;6416:33;6555:14;:45::i;:::-;6384:227;;6367:15;;;;;:::i;:::-;;;;6296:315;;10418:261;10591:22;;10658:13;10640:16;10632:40;;;;-1:-1:-1;;;10632:40:11;;;;;;;;:::i;6623:316::-;6710:77;6733:13;6710:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;6861:17;;;:24;;-1:-1:-1;;;;;6797:40:11;;;;;;;:25;;;;:40;;;;;;;:61;;:88;;;6895:37;;;;;;;;;;;;;;-1:-1:-1;;;;;;6895:37:11;;;;;;6623:316::o;7345:2190::-;-1:-1:-1;;;;;7472:27:11;;7464:95;;;;-1:-1:-1;;;7464:95:11;;14075:2:37;7464:95:11;;;14057:21:37;14114:2;14094:18;;;14087:30;14153:34;14133:18;;;14126:62;14224:25;14204:18;;;14197:53;14267:19;;7464:95:11;13873:419:37;7464:95:11;-1:-1:-1;;;;;7654:30:11;;7679:4;7654:30;;7646:89;;;;-1:-1:-1;;;7646:89:11;;14499:2:37;7646:89:11;;;14481:21:37;14538:2;14518:18;;;14511:30;14577:34;14557:18;;;14550:62;-1:-1:-1;;;14628:18:37;;;14621:44;14682:19;;7646:89:11;14297:410:37;7646:89:11;-1:-1:-1;;;;;;7846:40:11;;7819:24;7846:40;;;;;;;;;;;:65;-1:-1:-1;;;;;7952:40:11;;;;8020:1;7952:25;;;:40;;;;;;:65;-1:-1:-1;;;7846:65:11;;;-1:-1:-1;;;;;7846:65:11;;7819:24;7952:69;;;:::i;:::-;7921:100;;8123:20;8103:16;:40;8099:387;;-1:-1:-1;;;;;8181:40:11;;8159:19;8181:40;;;:25;;;:40;;;;;:80;;8240:20;;8181:80;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;8275:40:11;;;;:25;;;:40;;;;;;;:76;;8181:80;;;;;;;;;;;;;;-1:-1:-1;8181:80:11;;8275:40;8334:16;;8275:76;;;;;;:::i;:::-;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8380:43:11;;;;;;;;;;;;:95;;-1:-1:-1;;;;;8380:95:11;-1:-1:-1;;;;;;;;8380:95:11;;;;;;8099:387;-1:-1:-1;;;;;8531:40:11;;;;;;:25;;;:40;;;;;:64;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;8531:64:11;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8612:40:11;;;;;;;;;;8605:47;8747:25;8743:786;;8914:17;;;:24;8879:32;;8914:28;;8941:1;;8914:28;:::i;:::-;-1:-1:-1;;;;;8987:40:11;;8956:28;8987:40;;;:25;;;;:40;;;;;;:61;;8879:63;;-1:-1:-1;9066:48:11;;;9062:338;;9134:24;9161:2;:17;;9179:24;9161:43;;;;;;;;:::i;:::-;;;;;;;;;;;9222:17;;;:39;;-1:-1:-1;;;;;9161:43:11;;;;-1:-1:-1;9161:43:11;;9240:20;;9222:39;;;;;;:::i;:::-;;;;;;;;;;;;;:58;;-1:-1:-1;;;;;;9222:58:11;-1:-1:-1;;;;;9222:58:11;;;;;;9298:43;;;;;;-1:-1:-1;9298:25:11;;;:43;;;;;;:64;:87;;;9062:338;9413:2;:17;;:23;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;9413:23:11;;;;;-1:-1:-1;;;;;;9413:23:11;;;;;;;;;-1:-1:-1;;;;;9457:40:11;;;;9413:23;9457:25;;;:40;;;;;;:61;9450:68;-1:-1:-1;;7446:2089:11;;7345:2190;;;:::o;14:238:37:-;99:13;;64:5;;-1:-1:-1;;;;;143:33:37;;131:46;;121:74;;191:1;188;181:12;121:74;-1:-1:-1;;;;;213:33:37;;14:238;-1:-1:-1;;14:238:37:o;257:127::-;318:10;313:3;309:20;306:1;299:31;349:4;346:1;339:15;373:4;370:1;363:15;389:257;461:4;455:11;;;493:17;;-1:-1:-1;;;;;525:34:37;;561:22;;;522:62;519:88;;;587:18;;:::i;:::-;623:4;616:24;389:257;:::o;651:251::-;723:2;717:9;765:2;753:15;;-1:-1:-1;;;;;783:34:37;;819:22;;;780:62;777:88;;;845:18;;:::i;907:275::-;978:2;972:9;1043:2;1024:13;;-1:-1:-1;;1020:27:37;1008:40;;-1:-1:-1;;;;;1063:34:37;;1099:22;;;1060:62;1057:88;;;1125:18;;:::i;:::-;1161:2;1154:22;907:275;;-1:-1:-1;907:275:37:o;1187:191::-;1255:4;-1:-1:-1;;;;;1277:30:37;;1274:56;;;1310:18;;:::i;:::-;-1:-1:-1;1355:1:37;1351:14;1367:4;1347:25;;1187:191::o;1383:258::-;1455:1;1465:113;1479:6;1476:1;1473:13;1465:113;;;1555:11;;;1549:18;1536:11;;;1529:39;1501:2;1494:10;1465:113;;;1596:6;1593:1;1590:13;1587:48;;;-1:-1:-1;;1631:1:37;1613:16;;1606:27;1383:258::o;1646:2056::-;1725:5;1755:4;1799:3;1794:2;1786:6;1782:15;1778:25;1768:53;;1817:1;1814;1807:12;1768:53;1846:6;1840:13;1872:4;1896:68;1912:51;1960:2;1912:51;:::i;:::-;1896:68;:::i;:::-;1998:15;;;2084:1;2080:10;;;;2068:23;;2064:32;;;2029:12;;;;2108:15;;;2105:35;;;2136:1;2133;2126:12;2105:35;2172:2;2164:6;2160:15;2184:1489;2200:6;2195:3;2192:15;2184:1489;;;2273:10;;-1:-1:-1;;;;;2340:19:37;;;2337:109;;;2400:1;2429:2;2425;2418:14;2337:109;2469:24;;;;2516:4;-1:-1:-1;;2574:12:37;;;2570:21;;2566:30;-1:-1:-1;2563:120:37;;;2637:1;2666:2;2662;2655:14;2563:120;2709:22;;:::i;:::-;2758:42;2796:2;2792;2788:11;2758:42;:::i;:::-;2751:5;2744:57;2844:2;2840;2836:11;2830:18;2877:2;2867:8;2864:16;2861:109;;;2922:1;2952:3;2947;2940:16;2861:109;3002:8;2998:2;2994:17;2983:28;;;3052:3;3047:2;3042:3;3038:12;3034:22;3024:123;;3099:1;3129:3;3124;3117:16;3024:123;3186:2;3181:3;3177:12;3171:19;3214:2;3209:3;3206:11;3203:37;;;3220:18;;:::i;:::-;3268:47;3311:2;3306;3301;3296:3;3292:12;3288:21;3284:30;3268:47;:::i;:::-;3253:62;;3344:3;3335:7;3328:20;3391:3;3386:2;3380:3;3375;3371:13;3367:22;3364:31;3361:124;;;3437:1;3426:12;;3467:3;3462;3455:16;3361:124;3498:58;3552:3;3547:2;3538:7;3534:16;3529:2;3524:3;3520:12;3498:58;:::i;:::-;-1:-1:-1;3576:14:37;;;3569:31;;;;-1:-1:-1;;3613:18:37;;-1:-1:-1;3651:12:37;;;;2217;;2184:1489;;;-1:-1:-1;3691:5:37;1646:2056;-1:-1:-1;;;;;;;1646:2056:37:o;3707:2675::-;3900:6;3908;3916;3969:2;3957:9;3948:7;3944:23;3940:32;3937:52;;;3985:1;3982;3975:12;3937:52;4008:40;4038:9;4008:40;:::i;:::-;4092:2;4077:18;;4071:25;3998:50;;-1:-1:-1;;;;;;4145:14:37;;;4142:34;;;4172:1;4169;4162:12;4142:34;4210:6;4199:9;4195:22;4185:32;;4255:7;4248:4;4244:2;4240:13;4236:27;4226:55;;4277:1;4274;4267:12;4226:55;4306:2;4300:9;4329:68;4345:51;4393:2;4345:51;:::i;4329:68::-;4419:3;4443:2;4438:3;4431:15;4471:2;4466:3;4462:12;4455:19;;4522:2;4516;4513:1;4509:10;4505:2;4501:19;4497:28;4483:42;;4548:7;4540:6;4537:19;4534:39;;;4569:1;4566;4559:12;4534:39;4601:2;4597;4593:11;4613:1537;4629:6;4624:3;4621:15;4613:1537;;;4708:3;4702:10;4744:2;4731:11;4728:19;4725:39;;;4760:1;4757;4750:12;4725:39;4787:20;;4859:2;4831:16;;;-1:-1:-1;;4827:30:37;4823:39;4820:59;;;4875:1;4872;4865:12;4820:59;4905:22;;:::i;:::-;4954:42;4992:2;4988;4984:11;4954:42;:::i;:::-;4947:5;4940:57;5039:2;5035;5031:11;5025:18;5078:1;5069:7;5066:14;5056:42;;5094:1;5091;5084:12;5056:42;5129:2;5118:14;;5111:31;5185:2;5177:11;;5171:18;5205:16;;;5202:36;;;5234:1;5231;5224:12;5202:36;5269:8;5265:2;5261:17;5251:27;;;5318:7;5313:2;5309;5305:11;5301:25;5291:53;;5340:1;5337;5330:12;5291:53;5381:2;5377;5373:11;5367:18;5411:68;5427:51;5475:2;5427:51;:::i;5411:68::-;5523:17;;;5621:1;5617:10;;;;5609:19;;5630:2;5605:28;;5573:2;5562:14;;;5649:21;;;5646:41;;;5683:1;5680;5673:12;5646:41;5721:2;5717;5713:11;5700:24;;5737:298;5755:8;5748:5;5745:19;5737:298;;;5838:12;;-1:-1:-1;;;;;;5889:34:37;;5877:47;;5867:75;;5938:1;5935;5928:12;5867:75;5959:22;;6018:2;5776:14;;;;6007;;;;5737:298;;;6066:2;6055:14;;6048:29;-1:-1:-1;;6090:18:37;;-1:-1:-1;6137:2:37;6128:12;;;;4646;4613:1537;;;-1:-1:-1;6220:2:37;6205:18;;6199:25;6169:5;;-1:-1:-1;6199:25:37;-1:-1:-1;;;6236:16:37;;;6233:36;;;6265:1;6262;6255:12;6233:36;;6288:88;6368:7;6357:8;6346:9;6342:24;6288:88;:::i;:::-;6278:98;;;3707:2675;;;;;:::o;6387:127::-;6448:10;6443:3;6439:20;6436:1;6429:31;6479:4;6476:1;6469:15;6503:4;6500:1;6493:15;6519:127;6580:10;6575:3;6571:20;6568:1;6561:31;6611:4;6608:1;6601:15;6635:4;6632:1;6625:15;6651:135;6690:3;-1:-1:-1;;6711:17:37;;6708:43;;;6731:18;;:::i;:::-;-1:-1:-1;6778:1:37;6767:13;;6651:135::o;6791:127::-;6852:10;6847:3;6843:20;6840:1;6833:31;6883:4;6880:1;6873:15;6907:4;6904:1;6897:15;7440:257;7481:3;7519:5;7513:12;7546:6;7541:3;7534:19;7562:63;7618:6;7611:4;7606:3;7602:14;7595:4;7588:5;7584:16;7562:63;:::i;:::-;7679:2;7658:15;-1:-1:-1;;7654:29:37;7645:39;;;;7686:4;7641:50;;7440:257;-1:-1:-1;;7440:257:37:o;7702:2088::-;7968:4;7997:2;8037;8026:9;8022:18;8067:2;8056:9;8049:21;8090:6;8125;8119:13;8156:6;8148;8141:22;8182:3;8172:13;;8216:2;8205:9;8201:18;8194:25;;8278:2;8268:6;8265:1;8261:14;8250:9;8246:30;8242:39;8300:4;8339:2;8331:6;8327:15;8360:1;8370:1249;8384:6;8381:1;8378:13;8370:1249;;;8449:22;;;-1:-1:-1;;8445:37:37;8433:50;;8506:13;;8593:9;;-1:-1:-1;;;;;8589:35:37;8574:51;;8664:11;;;8658:18;8546:15;;;;8716:1;8699:19;;8689:170;;8769:10;8764:3;8760:20;8757:1;8750:31;8808:4;8805:1;8798:15;8840:4;8837:1;8830:15;8689:170;8879:15;;;8872:37;8932:4;8977:11;;;8971:18;9009:15;;;9002:27;;;9090:21;;9124:24;;;;9214:23;;;;-1:-1:-1;;9170:15:37;;;;9275:236;9291:8;9286:3;9283:17;9275:236;;;9372:15;;-1:-1:-1;;;;;;9368:42:37;9354:57;;9480:17;;;;9319:1;9310:11;;;;;9437:14;;;;9275:236;;;-1:-1:-1;9597:12:37;;;;9534:5;-1:-1:-1;;;9562:15:37;;;;8406:1;8399:9;8370:1249;;;-1:-1:-1;;;;;;;7397:31:37;;9655:18;;;7385:44;9712:22;;;9705:4;9690:20;;9683:52;9752:32;9716:6;9769;9752:32;:::i;:::-;9744:40;7702:2088;-1:-1:-1;;;;;;;;;;7702:2088:37:o;10654:274::-;10783:3;10821:6;10815:13;10837:53;10883:6;10878:3;10871:4;10863:6;10859:17;10837:53;:::i;:::-;10906:16;;;;;10654:274;-1:-1:-1;;10654:274:37:o;10933:219::-;11082:2;11071:9;11064:21;11045:4;11102:44;11142:2;11131:9;11127:18;11119:6;11102:44;:::i;:::-;11094:52;10933:219;-1:-1:-1;;;10933:219:37:o;12811:209::-;12849:3;-1:-1:-1;;;;;12919:14:37;;;12945:15;;;12942:41;;;12963:18;;:::i;:::-;13012:1;12999:15;;12811:209;-1:-1:-1;;;12811:209:37:o;14712:125::-;14752:4;14780:1;14777;14774:8;14771:34;;;14785:18;;:::i;:::-;-1:-1:-1;14822:9:37;;14712:125::o;14842:127::-;14903:10;14898:3;14894:20;14891:1;14884:31;14934:4;14931:1;14924:15;14958:4;14955:1;14948:15;14842:127;509:2322:0;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_112": { - "entryPoint": null, - "id": 112, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_116": { - "entryPoint": null, - "id": 116, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@addFacet_1286": { - "entryPoint": 4182, - "id": 1286, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@addFunction_1327": { - "entryPoint": null, - "id": 1327, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@addFunctions_1084": { - "entryPoint": 1726, - "id": 1084, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@diamondCut_983": { - "entryPoint": 449, - "id": 983, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@enforceHasContractCode_1590": { - "entryPoint": 4123, - "id": 1590, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@initializeDiamondCut_1571": { - "entryPoint": 1029, - "id": 1571, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@removeFunction_1494": { - "entryPoint": 4325, - "id": 1494, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@removeFunctions_1253": { - "entryPoint": 3630, - "id": 1253, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@replaceFunctions_1188": { - "entryPoint": 2673, - "id": 1188, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@setContractOwner_843": { - "entryPoint": 263, - "id": 843, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_encode_address": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_bytes": { - "entryPoint": 5961, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 6395, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 6035, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 6423, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_6e6486aeb9db70da259b7171a739046119facaec2d8a6bd46f1145fe8391014a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 6493, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 5917, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "increment_t_uint256": { - "entryPoint": 5860, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "increment_t_uint96": { - "entryPoint": 6449, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 5813, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x21": { - "entryPoint": 5766, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x31": { - "entryPoint": 6516, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 5719, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:9784:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "188:182:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "205:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "216:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "198:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "198:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "198:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "239:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "250:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "235:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "235:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "255:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "228:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "228:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "228:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "278:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "289:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "274:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "274:18:37" - }, - { - "hexValue": "4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "294:34:37", - "type": "", - "value": "Diamond: Function does not exist" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "267:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "267:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "267:62:37" - }, - { - "nodeType": "YulAssignment", - "src": "338:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "350:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "361:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "346:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "346:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "338:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_6e6486aeb9db70da259b7171a739046119facaec2d8a6bd46f1145fe8391014a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "165:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "179:4:37", - "type": "" - } - ], - "src": "14:356:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "407:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "424:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "427:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "417:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "417:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "417:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "521:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "524:4:37", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "514:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "514:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "514:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "545:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "548:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "538:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "538:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "538:15:37" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "375:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "596:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "613:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "616:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "606:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "606:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "606:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "710:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "713:4:37", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "703:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "703:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "703:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "734:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "737:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "727:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "727:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "727:15:37" - } - ] - }, - "name": "panic_error_0x21", - "nodeType": "YulFunctionDefinition", - "src": "564:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "927:229:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "944:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "955:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "937:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "937:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "937:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "978:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "989:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "974:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "974:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "994:2:37", - "type": "", - "value": "39" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "967:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "967:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "967:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1017:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1028:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1013:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1013:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a20496e636f72726563742046616365744375", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1033:34:37", - "type": "", - "value": "LibDiamondCut: Incorrect FacetCu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1006:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1006:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1006:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1088:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1099:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1084:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1084:18:37" - }, - { - "hexValue": "74416374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1104:9:37", - "type": "", - "value": "tAction" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1077:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1077:37:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1077:37:37" - }, - { - "nodeType": "YulAssignment", - "src": "1123:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1135:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1146:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1131:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1131:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1123:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "904:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "918:4:37", - "type": "" - } - ], - "src": "753:403:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1193:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1210:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1213:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1203:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1203:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1203:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1307:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1310:4:37", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1300:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1300:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1300:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1331:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1334:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1324:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1324:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1324:15:37" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "1161:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1397:148:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1488:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "1490:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1490:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1490:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1413:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1420:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1410:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1410:77:37" - }, - "nodeType": "YulIf", - "src": "1407:103:37" - }, - { - "nodeType": "YulAssignment", - "src": "1519:20:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1530:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1537:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1526:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1526:13:37" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "1519:3:37" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1379:5:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "1389:3:37", - "type": "" - } - ], - "src": "1350:195:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1594:83:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1611:3:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1620:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1627:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1616:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1616:54:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1604:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1604:67:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1604:67:37" - } - ] - }, - "name": "abi_encode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1578:5:37", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1585:3:37", - "type": "" - } - ], - "src": "1550:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1735:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1745:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1754:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1749:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1814:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1839:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1844:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1835:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1835:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "1858:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1863:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1854:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1854:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1848:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1848:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1828:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1828:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1828:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1775:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1778:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1772:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1772:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1786:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1788:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1797:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1800:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1793:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1793:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1788:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1768:3:37", - "statements": [] - }, - "src": "1764:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1903:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "1916:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1921:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1912:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1912:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1930:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1905:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1905:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1905:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1892:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1895:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1889:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1889:13:37" - }, - "nodeType": "YulIf", - "src": "1886:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "1713:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "1718:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1723:6:37", - "type": "" - } - ], - "src": "1682:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1994:267:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2004:26:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2024:5:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2018:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2018:12:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2008:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2046:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2051:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2039:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2039:19:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2039:19:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2093:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2100:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2089:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2089:16:37" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2111:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2116:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2107:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2107:14:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2123:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "2067:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "2067:63:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2067:63:37" - }, - { - "nodeType": "YulAssignment", - "src": "2139:116:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2154:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2167:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2175:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2163:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2163:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2180:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2159:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2159:88:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2150:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2150:98:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2250:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2146:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2146:109:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2139:3:37" - } - ] - } - ] - }, - "name": "abi_encode_bytes", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1971:5:37", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1978:3:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1986:3:37", - "type": "" - } - ], - "src": "1945:316:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2541:1997:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2551:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2561:2:37", - "type": "", - "value": "96" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2555:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2572:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2590:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2601:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2586:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2586:18:37" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "2576:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2620:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2631:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2613:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2613:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2613:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2643:17:37", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "2654:6:37" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2647:3:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2669:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2689:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2683:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2683:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2673:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "2712:6:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2720:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2705:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2705:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2705:22:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2736:13:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2746:3:37", - "type": "", - "value": "128" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "2740:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2758:25:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2769:9:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2780:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2765:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2765:18:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2758:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2792:53:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2814:9:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2829:1:37", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2832:6:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2825:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2825:14:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2810:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2810:30:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2842:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2806:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2806:39:37" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "2796:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2854:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2864:4:37", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "2858:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2877:29:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2895:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2903:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2891:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2891:15:37" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "2881:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2915:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2924:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2919:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2983:1384:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3004:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3017:6:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3025:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3013:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3013:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3037:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3009:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3009:95:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2997:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2997:108:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2997:108:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3118:23:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "3134:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3128:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3128:13:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "3122:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3154:29:37", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3172:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3180:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3168:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3168:15:37" - }, - "variables": [ - { - "name": "tail_3", - "nodeType": "YulTypedName", - "src": "3158:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3203:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3221:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3215:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3215:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3226:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3211:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3211:58:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3196:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3196:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3196:74:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3283:38:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3313:2:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3317:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3309:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3309:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3303:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3303:18:37" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "3287:12:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3377:184:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3402:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3405:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3395:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3395:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3395:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3507:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3510:4:37", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3500:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3500:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3500:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3539:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3542:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3532:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3532:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3532:15:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "3347:12:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3361:1:37", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3344:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3344:19:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3337:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3337:27:37" - }, - "nodeType": "YulIf", - "src": "3334:227:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3585:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3593:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3581:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3581:15:37" - }, - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "3598:12:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3574:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3574:37:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3574:37:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3624:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3634:4:37", - "type": "", - "value": "0x40" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "3628:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3651:40:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3683:2:37" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "3687:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3679:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3679:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3673:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3673:18:37" - }, - "variables": [ - { - "name": "memberValue0_1", - "nodeType": "YulTypedName", - "src": "3655:14:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3715:6:37" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "3723:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3711:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3711:15:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3728:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3704:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3704:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3704:27:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3744:19:37", - "value": { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "3757:6:37" - }, - "variables": [ - { - "name": "pos_1", - "nodeType": "YulTypedName", - "src": "3748:5:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3776:37:37", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "3798:14:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3792:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3792:21:37" - }, - "variables": [ - { - "name": "length_1", - "nodeType": "YulTypedName", - "src": "3780:8:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "3833:6:37" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "3841:8:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3826:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3826:24:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3826:24:37" - }, - { - "nodeType": "YulAssignment", - "src": "3863:24:37", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "3876:6:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "3884:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3872:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3872:15:37" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "3863:5:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3900:39:37", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "3920:14:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3936:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3916:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3916:23:37" - }, - "variables": [ - { - "name": "srcPtr_1", - "nodeType": "YulTypedName", - "src": "3904:8:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3952:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3963:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i_1", - "nodeType": "YulTypedName", - "src": "3956:3:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4038:221:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "4063:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "4080:8:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4074:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "4074:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4091:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4070:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4070:88:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4056:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4056:103:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4056:103:37" - }, - { - "nodeType": "YulAssignment", - "src": "4176:23:37", - "value": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "4189:5:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4196:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4185:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4185:14:37" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "4176:5:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4216:29:37", - "value": { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "4232:8:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4242:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4228:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4228:17:37" - }, - "variableNames": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "4216:8:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "3988:3:37" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "3993:8:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3985:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3985:17:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "4003:22:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4005:18:37", - "value": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "4016:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4021:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4012:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4012:11:37" - }, - "variableNames": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "4005:3:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "3981:3:37", - "statements": [] - }, - "src": "3977:282:37" - }, - { - "nodeType": "YulAssignment", - "src": "4272:15:37", - "value": { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "4282:5:37" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "4272:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4300:25:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "4314:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4322:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4310:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4310:15:37" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "4300:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4338:19:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4349:3:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4354:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4345:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4345:12:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "4338:3:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2945:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2948:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2942:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2942:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2956:18:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2958:14:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2967:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2970:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2963:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2963:9:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2958:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2938:3:37", - "statements": [] - }, - "src": "2934:1433:37" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4395:6:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4407:9:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4418:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4403:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4403:18:37" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "4376:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "4376:46:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4376:46:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4442:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4453:4:37", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4438:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4438:20:37" - }, - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "4464:6:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4472:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4460:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4460:22:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4431:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4431:52:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4431:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "4492:40:37", - "value": { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "4517:6:37" - }, - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "4525:6:37" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "4500:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "4500:32:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4492:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2494:9:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "2505:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2513:6:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2521:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2532:4:37", - "type": "" - } - ], - "src": "2266:2272:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4717:250:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4734:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4745:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4727:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4727:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4727:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4768:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4779:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4764:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4764:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4784:2:37", - "type": "", - "value": "60" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4757:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4757:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4757:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4807:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4818:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4803:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4803:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e6974206973206164647265737328", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4823:34:37", - "type": "", - "value": "LibDiamondCut: _init is address(" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4796:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4796:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4796:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4878:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4889:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4874:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4874:18:37" - }, - { - "hexValue": "3029206275745f63616c6c64617461206973206e6f7420656d707479", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4894:30:37", - "type": "", - "value": "0) but_calldata is not empty" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4867:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4867:58:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4867:58:37" - }, - { - "nodeType": "YulAssignment", - "src": "4934:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4946:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4957:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4942:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4942:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4934:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4694:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4708:4:37", - "type": "" - } - ], - "src": "4543:424:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5146:251:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5163:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5174:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5156:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5156:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5156:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5197:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5208:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5193:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5193:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5213:2:37", - "type": "", - "value": "61" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5186:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5186:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5186:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5236:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5247:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5232:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5232:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d7074", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5252:34:37", - "type": "", - "value": "LibDiamondCut: _calldata is empt" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5225:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5225:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5225:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5307:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5318:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5303:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5303:18:37" - }, - { - "hexValue": "7920627574205f696e6974206973206e6f742061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5323:31:37", - "type": "", - "value": "y but _init is not address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5296:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5296:59:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5296:59:37" - }, - { - "nodeType": "YulAssignment", - "src": "5364:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5376:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5387:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5372:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5372:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5364:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5123:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5137:4:37", - "type": "" - } - ], - "src": "4972:425:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5539:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "5549:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5569:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5563:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "5563:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "5553:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5611:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5619:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5607:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5607:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5626:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "5631:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "5585:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "5585:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5585:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "5647:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5658:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "5663:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5654:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5654:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "5647:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "5515:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5520:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "5531:3:37", - "type": "" - } - ], - "src": "5402:274:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5802:98:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5819:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5830:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5812:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5812:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5812:21:37" - }, - { - "nodeType": "YulAssignment", - "src": "5842:52:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5867:6:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5879:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5890:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5875:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5875:18:37" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "5850:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "5850:44:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5842:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5771:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5782:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5793:4:37", - "type": "" - } - ], - "src": "5681:219:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6079:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6096:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6107:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6089:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6089:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6089:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6130:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6141:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6126:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6126:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6146:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6119:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6119:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6119:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6169:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6180:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6165:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6165:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6185:34:37", - "type": "", - "value": "LibDiamondCut: _init function re" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6158:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6158:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6158:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6240:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6251:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6236:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6236:18:37" - }, - { - "hexValue": "766572746564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6256:8:37", - "type": "", - "value": "verted" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6229:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6229:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6229:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "6274:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6286:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6297:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6282:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6282:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6274:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6056:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6070:4:37", - "type": "" - } - ], - "src": "5905:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6486:233:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6503:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6514:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6496:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6496:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6496:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6537:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6548:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6533:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6533:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6553:2:37", - "type": "", - "value": "43" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6526:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6526:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6526:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6576:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6587:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6572:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6572:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6592:34:37", - "type": "", - "value": "LibDiamondCut: No selectors in f" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6565:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6565:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6565:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6647:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6658:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6643:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6643:18:37" - }, - { - "hexValue": "6163657420746f20637574", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6663:13:37", - "type": "", - "value": "acet to cut" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6636:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6636:41:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6636:41:37" - }, - { - "nodeType": "YulAssignment", - "src": "6686:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6698:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6709:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6694:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6694:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6686:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6463:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6477:4:37", - "type": "" - } - ], - "src": "6312:407:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6898:234:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6915:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6926:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6908:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6908:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6908:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6949:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6960:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6945:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6945:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6965:2:37", - "type": "", - "value": "44" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6938:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6938:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6938:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6988:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6999:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6984:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6984:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204164642066616365742063616e27742062", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7004:34:37", - "type": "", - "value": "LibDiamondCut: Add facet can't b" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6977:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6977:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6977:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7059:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7070:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7055:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7055:18:37" - }, - { - "hexValue": "652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7075:14:37", - "type": "", - "value": "e address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7048:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7048:42:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7048:42:37" - }, - { - "nodeType": "YulAssignment", - "src": "7099:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7111:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7122:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7107:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7107:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7099:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6875:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6889:4:37", - "type": "" - } - ], - "src": "6724:408:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7311:243:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7328:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7339:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7321:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7321:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7321:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7362:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7373:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7358:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7358:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7378:2:37", - "type": "", - "value": "53" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7351:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7351:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7351:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7401:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7412:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7397:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7397:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7417:34:37", - "type": "", - "value": "LibDiamondCut: Can't add functio" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7390:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7390:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7390:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7472:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7483:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7468:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7468:18:37" - }, - { - "hexValue": "6e207468617420616c726561647920657869737473", - "kind": "string", - "nodeType": "YulLiteral", - "src": "7488:23:37", - "type": "", - "value": "n that already exists" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7461:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7461:51:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7461:51:37" - }, - { - "nodeType": "YulAssignment", - "src": "7521:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7533:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7544:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7529:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7529:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "7521:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7288:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7302:4:37", - "type": "" - } - ], - "src": "7137:417:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7605:171:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7615:36:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7625:26:37", - "type": "", - "value": "0xffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "7619:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7660:29:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7679:5:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7686:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7675:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7675:14:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "7664:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7717:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "7719:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "7719:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7719:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "7704:7:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "7713:2:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "7701:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "7701:15:37" - }, - "nodeType": "YulIf", - "src": "7698:41:37" - }, - { - "nodeType": "YulAssignment", - "src": "7748:22:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "7759:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7768:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7755:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7755:15:37" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "7748:3:37" - } - ] - } - ] - }, - "name": "increment_t_uint96", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7587:5:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "7597:3:37", - "type": "" - } - ], - "src": "7559:217:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7955:246:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7972:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7983:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7965:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7965:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7965:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8006:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8017:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8002:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8002:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8022:2:37", - "type": "", - "value": "56" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7995:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7995:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7995:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8045:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8056:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8041:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8041:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8061:34:37", - "type": "", - "value": "LibDiamondCut: Can't replace fun" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8034:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8034:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8034:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8116:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8127:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8112:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8112:18:37" - }, - { - "hexValue": "6374696f6e20776974682073616d652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8132:26:37", - "type": "", - "value": "ction with same function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8105:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8105:54:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8105:54:37" - }, - { - "nodeType": "YulAssignment", - "src": "8168:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8180:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8191:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8176:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8176:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "8168:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7932:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7946:4:37", - "type": "" - } - ], - "src": "7781:420:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8380:244:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8397:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8408:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8390:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8390:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8390:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8431:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8442:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8427:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8427:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8447:2:37", - "type": "", - "value": "54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8420:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8420:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8420:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8470:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8481:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8466:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8466:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8486:34:37", - "type": "", - "value": "LibDiamondCut: Remove facet addr" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8459:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8459:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8459:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8541:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8552:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8537:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8537:18:37" - }, - { - "hexValue": "657373206d7573742062652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8557:24:37", - "type": "", - "value": "ess must be address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8530:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8530:52:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8530:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "8591:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8603:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8614:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8599:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8599:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "8591:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8357:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "8371:4:37", - "type": "" - } - ], - "src": "8206:418:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8803:245:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8820:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8831:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8813:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8813:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8813:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8854:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8865:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8850:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8850:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8870:2:37", - "type": "", - "value": "55" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8843:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8843:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8843:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8893:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8904:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8889:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8889:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e63", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8909:34:37", - "type": "", - "value": "LibDiamondCut: Can't remove func" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8882:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8882:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8882:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8964:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8975:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8960:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8960:18:37" - }, - { - "hexValue": "74696f6e207468617420646f65736e2774206578697374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "8980:25:37", - "type": "", - "value": "tion that doesn't exist" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8953:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8953:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8953:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "9015:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9027:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9038:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9023:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9023:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9015:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "8780:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "8794:4:37", - "type": "" - } - ], - "src": "8629:419:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9227:236:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9244:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9255:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9237:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9237:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9237:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9278:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9289:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9274:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9274:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9294:2:37", - "type": "", - "value": "46" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9267:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9267:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9267:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9317:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9328:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9313:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9313:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d75", - "kind": "string", - "nodeType": "YulLiteral", - "src": "9333:34:37", - "type": "", - "value": "LibDiamondCut: Can't remove immu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9306:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9306:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9306:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9388:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9399:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9384:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9384:18:37" - }, - { - "hexValue": "7461626c652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "9404:16:37", - "type": "", - "value": "table function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9377:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9377:44:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9377:44:37" - }, - { - "nodeType": "YulAssignment", - "src": "9430:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9442:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9453:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9438:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9438:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9430:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9204:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "9218:4:37", - "type": "" - } - ], - "src": "9053:410:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9517:76:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "9539:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "9541:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "9541:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9541:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "9533:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "9536:1:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "9530:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "9530:8:37" - }, - "nodeType": "YulIf", - "src": "9527:34:37" - }, - { - "nodeType": "YulAssignment", - "src": "9570:17:37", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "9582:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "9585:1:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9578:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9578:9:37" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "9570:4:37" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "9499:1:37", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "9502:1:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "9508:4:37", - "type": "" - } - ], - "src": "9468:125:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9630:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9647:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9650:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9640:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9640:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9640:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9744:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9747:4:37", - "type": "", - "value": "0x31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9737:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9737:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9737:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9768:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9771:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "9761:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9761:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9761:15:37" - } - ] - }, - "name": "panic_error_0x31", - "nodeType": "YulFunctionDefinition", - "src": "9598:184:37" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_stringliteral_6e6486aeb9db70da259b7171a739046119facaec2d8a6bd46f1145fe8391014a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Diamond: Function does not exist\")\n tail := add(headStart, 96)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function panic_error_0x21()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 39)\n mstore(add(headStart, 64), \"LibDiamondCut: Incorrect FacetCu\")\n mstore(add(headStart, 96), \"tAction\")\n tail := add(headStart, 128)\n }\n function panic_error_0x11()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function abi_encode_address(value, pos)\n {\n mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n }\n function abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n let _1 := 96\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 128\n pos := add(headStart, _2)\n let tail_2 := add(add(headStart, shl(5, length)), _2)\n let _3 := 0x20\n let srcPtr := add(value0, _3)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80))\n let _4 := mload(srcPtr)\n let tail_3 := add(tail_2, _1)\n mstore(tail_2, and(mload(_4), 0xffffffffffffffffffffffffffffffffffffffff))\n let memberValue0 := mload(add(_4, _3))\n if iszero(lt(memberValue0, 3))\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n mstore(add(tail_2, _3), memberValue0)\n let _5 := 0x40\n let memberValue0_1 := mload(add(_4, _5))\n mstore(add(tail_2, _5), _1)\n let pos_1 := tail_3\n let length_1 := mload(memberValue0_1)\n mstore(tail_3, length_1)\n pos_1 := add(tail_2, _2)\n let srcPtr_1 := add(memberValue0_1, _3)\n let i_1 := 0\n for { } lt(i_1, length_1) { i_1 := add(i_1, 1) }\n {\n mstore(pos_1, and(mload(srcPtr_1), 0xffffffff00000000000000000000000000000000000000000000000000000000))\n pos_1 := add(pos_1, _3)\n srcPtr_1 := add(srcPtr_1, _3)\n }\n tail_2 := pos_1\n srcPtr := add(srcPtr, _3)\n pos := add(pos, _3)\n }\n abi_encode_address(value1, add(headStart, _3))\n mstore(add(headStart, 0x40), sub(tail_2, headStart))\n tail := abi_encode_bytes(value2, tail_2)\n }\n function abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 60)\n mstore(add(headStart, 64), \"LibDiamondCut: _init is address(\")\n mstore(add(headStart, 96), \"0) but_calldata is not empty\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 61)\n mstore(add(headStart, 64), \"LibDiamondCut: _calldata is empt\")\n mstore(add(headStart, 96), \"y but _init is not address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"LibDiamondCut: _init function re\")\n mstore(add(headStart, 96), \"verted\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 43)\n mstore(add(headStart, 64), \"LibDiamondCut: No selectors in f\")\n mstore(add(headStart, 96), \"acet to cut\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"LibDiamondCut: Add facet can't b\")\n mstore(add(headStart, 96), \"e address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 53)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't add functio\")\n mstore(add(headStart, 96), \"n that already exists\")\n tail := add(headStart, 128)\n }\n function increment_t_uint96(value) -> ret\n {\n let _1 := 0xffffffffffffffffffffffff\n let value_1 := and(value, _1)\n if eq(value_1, _1) { panic_error_0x11() }\n ret := add(value_1, 1)\n }\n function abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 56)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't replace fun\")\n mstore(add(headStart, 96), \"ction with same function\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 54)\n mstore(add(headStart, 64), \"LibDiamondCut: Remove facet addr\")\n mstore(add(headStart, 96), \"ess must be address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 55)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove func\")\n mstore(add(headStart, 96), \"tion that doesn't exist\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 46)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove immu\")\n mstore(add(headStart, 96), \"table function\")\n tail := add(headStart, 128)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y) { panic_error_0x11() }\n diff := sub(x, y)\n }\n function panic_error_0x31()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x31)\n revert(0, 0x24)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0xB JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD DUP2 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0xE3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4469616D6F6E643A2046756E6374696F6E20646F6573206E6F74206578697374 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x102 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3BA JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E1 JUMPI PUSH2 0x1E1 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x202 JUMPI PUSH2 0x202 PUSH2 0x1686 JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x214 JUMPI PUSH2 0x214 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x263 JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x22F JUMPI PUSH2 0x22F PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x24D JUMPI PUSH2 0x24D PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x6BE JUMP JUMPDEST PUSH2 0x3A7 JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x277 JUMPI PUSH2 0x277 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x2C1 JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x292 JUMPI PUSH2 0x292 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2B0 JUMPI PUSH2 0x2B0 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xA71 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2D5 JUMPI PUSH2 0x2D5 PUSH2 0x1686 JUMP JUMPDEST EQ ISZERO PUSH2 0x31F JUMPI PUSH2 0x25E DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2F0 JUMPI PUSH2 0x2F0 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x30E JUMPI PUSH2 0x30E PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xE2E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74416374696F6E00000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP DUP1 PUSH2 0x3B2 DUP2 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1C4 JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x3EE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1793 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x400 DUP3 DUP3 PUSH2 0x405 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x4B3 JUMPI DUP1 MLOAD ISZERO PUSH2 0x4AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x544 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0x583 JUMPI PUSH2 0x583 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19A4 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x101B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x5AB SWAP2 SWAP1 PUSH2 0x18FB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x5E6 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5EB JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x6B8 JUMPI DUP1 MLOAD ISZERO PUSH2 0x630 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xDA SWAP2 SWAP1 PUSH2 0x1917 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7665727465640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x74F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x813 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x858 JUMPI PUSH2 0x858 DUP3 DUP6 PUSH2 0x1056 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xA6A JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x878 JUMPI PUSH2 0x878 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x95D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E207468617420616C7265616479206578697374730000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xA52 DUP2 PUSH2 0x1931 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xA62 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x85B JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xB02 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xBC6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xC0B JUMPI PUSH2 0xC0B DUP3 DUP6 PUSH2 0x1056 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xA6A JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xC2B JUMPI PUSH2 0xC2B PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 EQ ISZERO PUSH2 0xD16 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH2 0xD21 DUP6 DUP3 DUP5 PUSH2 0x10E5 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xE16 DUP2 PUSH2 0x1931 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xE26 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC0E JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xEBF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO PUSH2 0xF84 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x657373206D757374206265206164647265737328302900000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x6B8 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xFA4 JUMPI PUSH2 0xFA4 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x1006 DUP5 DUP3 DUP5 PUSH2 0x10E5 JUMP JUMPDEST POP POP DUP1 DUP1 PUSH2 0x1013 SWAP1 PUSH2 0x16E4 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xF87 JUMP JUMPDEST DUP2 EXTCODESIZE DUP2 DUP2 PUSH2 0x6B8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xDA SWAP2 SWAP1 PUSH2 0x1917 JUMP JUMPDEST PUSH2 0x1078 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x19CC PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x101B JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x1188 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ ISZERO PUSH2 0x122E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7461626C652066756E6374696F6E000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0xDA JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP2 DIV PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 PUSH2 0x12B8 SWAP2 PUSH2 0x195D JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0x13FF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x12FA JUMPI PUSH2 0x12FA PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x1358 JUMPI PUSH2 0x1358 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x1435 JUMPI PUSH2 0x1435 PUSH2 0x1974 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE DUP1 PUSH2 0xA6A JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x14CA SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x195D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x15B8 JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x1516 JUMPI PUSH2 0x1516 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x1554 JUMPI PUSH2 0x1554 PUSH2 0x1657 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0x15CB JUMPI PUSH2 0x15CB PUSH2 0x1974 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1716 JUMPI PUSH2 0x1716 PUSH2 0x16B5 JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1738 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1720 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x6B8 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1761 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x171D JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x18BE JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP11 DUP6 SUB ADD DUP7 MSTORE DUP2 MLOAD DUP9 DUP6 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP5 DUP3 ADD MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x1845 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x18A9 JUMPI DUP4 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x1867 JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x17BC JUMP JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x18ED DUP2 DUP10 PUSH2 0x1749 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x190D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x171D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x192A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1749 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x1953 JUMPI PUSH2 0x1953 PUSH2 0x16B5 JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x196F JUMPI PUSH2 0x196F PUSH2 0x16B5 JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2647472 PUSH16 0x6E58221220BDDC11B0A43D16AA15C78F SWAP6 CALLVALUE 0xF7 0x27 0x5D 0x2D SWAP9 DUP11 0xB8 PUSH15 0x49A953FCE3E4BCD0367F1164736F6C PUSH4 0x4300080B STOP CALLER ", - "sourceMap": "509:2322:0:-:0;;;;;;;;1709:36;2001:7;;;;1971:38;;492:45:11;1971:38:0;;;;;;;;:51;492:45:11;;1971:51:0;;;2032:64;;;;;;;216:2:37;2032:64:0;;;198:21:37;;;235:18;;;228:30;294:34;274:18;;;267:62;346:18;;2032:64:0;;;;;;;;;2293:14;2290:1;2287;2274:34;2437:1;2434;2418:14;2415:1;2408:5;2401;2388:51;2509:16;2506:1;2503;2488:38;2613:6;2632:66;;;;2747:16;2744:1;2737:27;2632:66;2667:16;2664:1;2657:27;1851:264:11;1993:16;;;2019:28;;;1993:16;2019:28;;;;;;;;;2062:46;;492:45;;1993:16;;;;;;2062:46;;1915:25;;2062:46;1905:210;;1851:264;:::o;2563:1067::-;2719:18;2714:806;2752:11;:18;2739:10;:31;2714:806;;;2800:33;2836:11;2848:10;2836:23;;;;;;;;:::i;:::-;;;;;;;:30;;;2800:66;;2894:30;2884:40;;;;;;;;:::i;:::-;:6;:40;;;;;;;;:::i;:::-;;2880:630;;;2944:93;2957:11;2969:10;2957:23;;;;;;;;:::i;:::-;;;;;;;:36;;;2995:11;3007:10;2995:23;;;;;;;;:::i;:::-;;;;;;;:41;;;2944:12;:93::i;:::-;2880:630;;;3072:34;3062:6;:44;;;;;;;;:::i;:::-;;3058:452;;;3126:97;3143:11;3155:10;3143:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3181:11;3193:10;3181:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3126:16;:97::i;3058:452::-;3258:33;3248:6;:43;;;;;;;;:::i;:::-;;3244:266;;;3311:96;3327:11;3339:10;3327:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3365:11;3377:10;3365:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3311:15;:96::i;3244:266::-;3446:49;;;;;955:2:37;3446:49:11;;;937:21:37;994:2;974:18;;;967:30;1033:34;1013:18;;;1006:62;1104:9;1084:18;;;1077:37;1131:19;;3446:49:11;753:403:37;3244:266:11;-1:-1:-1;2772:12:11;;;;:::i;:::-;;;;2714:806;;;;3534:41;3545:11;3558:5;3565:9;3534:41;;;;;;;;:::i;:::-;;;;;;;;3585:38;3606:5;3613:9;3585:20;:38::i;:::-;2563:1067;;;:::o;9541:871::-;9633:19;;;9629:777;;9676:16;;:21;9668:94;;;;;;;4745:2:37;9668:94:11;;;4727:21:37;4784:2;4764:18;;;4757:30;4823:34;4803:18;;;4796:62;4894:30;4874:18;;;4867:58;4942:19;;9668:94:11;4543:424:37;9668:94:11;9541:871;;:::o;9629:777::-;9820:1;9801:9;:16;:20;9793:94;;;;;;;5174:2:37;9793:94:11;;;5156:21:37;5213:2;5193:18;;;5186:30;5252:34;5232:18;;;5225:62;5323:31;5303:18;;;5296:59;5372:19;;9793:94:11;4972:425:37;9793:94:11;9905:22;;;9922:4;9905:22;9901:134;;9947:73;9970:5;9947:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;10049:12;10063:18;10085:5;:18;;10104:9;10085:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10048:66;;;;10133:7;10128:268;;10164:12;;:16;10160:222;;10261:5;10247:21;;;;;;;;;;;:::i;10160:222::-;10315:48;;;;;6107:2:37;10315:48:11;;;6089:21:37;6146:2;6126:18;;;6119:30;6185:34;6165:18;;;6158:62;6256:8;6236:18;;;6229:36;6282:19;;10315:48:11;5905:402:37;10160:222:11;9779:627;;9541:871;;:::o;3636:1089::-;3772:1;3744:18;:25;:29;3736:85;;;;;;;6514:2:37;3736:85:11;;;6496:21:37;6553:2;6533:18;;;6526:30;6592:34;6572:18;;;6565:62;6663:13;6643:18;;;6636:41;6694:19;;3736:85:11;6312:407:37;3736:85:11;492:45;3901:27;;;3893:84;;;;;;;6926:2:37;3893:84:11;;;6908:21:37;6965:2;6945:18;;;6938:30;7004:34;6984:18;;;6977:62;7075:14;7055:18;;;7048:42;7107:19;;3893:84:11;6724:408:37;3893:84:11;4020:40;;;3987:23;4020:40;;;:25;;;:40;;;;;:65;4154:21;;;4150:91;;4191:27;4200:2;4204:13;4191:8;:27::i;:::-;4255:21;4250:469;4294:18;:25;4278:13;:41;4250:469;;;4352:15;4370:18;4389:13;4370:33;;;;;;;;:::i;:::-;;;;;;;;;;;;4443:39;;;4417:23;4443:39;;;;;;;;;;;:52;4370:33;;-1:-1:-1;4443:52:11;;4517:29;;4509:95;;;;;;;7339:2:37;4509:95:11;;;7321:21:37;7378:2;7358:18;;;7351:30;7417:34;7397:18;;;7390:62;7488:23;7468:18;;;7461:51;7529:19;;4509:95:11;7137:417:37;4509:95:11;7084:40;;;:29;:40;;;;;;;;;;;:85;;;;;;;;;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;7084:85;7263:69;;;;4690:18;;;;:::i;:::-;;;;4338:381;;4321:15;;;;;:::i;:::-;;;;4250:469;;;;3726:999;;3636:1089;;:::o;4731:1138::-;4871:1;4843:18;:25;:29;4835:85;;;;;;;6514:2:37;4835:85:11;;;6496:21:37;6553:2;6533:18;;;6526:30;6592:34;6572:18;;;6565:62;6663:13;6643:18;;;6636:41;6694:19;;4835:85:11;6312:407:37;4835:85:11;492:45;4992:27;;;4984:84;;;;;;;6926:2:37;4984:84:11;;;6908:21:37;6965:2;6945:18;;;6938:30;7004:34;6984:18;;;6977:62;7075:14;7055:18;;;7048:42;7107:19;;4984:84:11;6724:408:37;4984:84:11;5111:40;;;5078:23;5111:40;;;:25;;;:40;;;;;:65;5245:21;;;5241:79;;5282:27;5291:2;5295:13;5282:8;:27::i;:::-;5334:21;5329:534;5373:18;:25;5357:13;:41;5329:534;;;5431:15;5449:18;5468:13;5449:33;;;;;;;;:::i;:::-;;;;;;;;;;;;5522:39;;;5496:23;5522:39;;;;;;;;;;;:52;5449:33;;-1:-1:-1;5522:52:11;;;;;5596:32;;;;;5588:101;;;;;;;7983:2:37;5588:101:11;;;7965:21:37;8022:2;8002:18;;;7995:30;8061:34;8041:18;;;8034:62;8132:26;8112:18;;;8105:54;8176:19;;5588:101:11;7781:420:37;5588:101:11;5703:45;5718:2;5722:15;5739:8;5703:14;:45::i;:::-;7084:40;;;:29;:40;;;;;;;;;;;:85;;;;;;;;;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;7084:85;7263:69;;;;5834:18;;;;:::i;:::-;;;;5417:446;;5400:15;;;;;:::i;:::-;;;;5329:534;;5875:742;6014:1;5986:18;:25;:29;5978:85;;;;;;;6514:2:37;5978:85:11;;;6496:21:37;6553:2;6533:18;;;6526:30;6592:34;6572:18;;;6565:62;6663:13;6643:18;;;6636:41;6694:19;;5978:85:11;6312:407:37;5978:85:11;492:45;6200:27;;;;6192:94;;;;;;;8408:2:37;6192:94:11;;;8390:21:37;8447:2;8427:18;;;8420:30;8486:34;8466:18;;;8459:62;8557:24;8537:18;;;8530:52;8599:19;;6192:94:11;8206:418:37;6192:94:11;6301:21;6296:315;6340:18;:25;6324:13;:41;6296:315;;;6398:15;6416:18;6435:13;6416:33;;;;;;;;:::i;:::-;;;;;;;;;;;;6489:39;;;6463:23;6489:39;;;;;;;;;;;:52;6416:33;;-1:-1:-1;6489:52:11;;6555:45;6489:2;:52;6416:33;6555:14;:45::i;:::-;6384:227;;6367:15;;;;;:::i;:::-;;;;6296:315;;10418:261;10591:22;;10658:13;10640:16;10632:40;;;;;;;;;;;;;:::i;6623:316::-;6710:77;6733:13;6710:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;6861:17;;;:24;;6797:40;;;;;;;;:25;;;;:40;;;;;;;:61;;:88;;;6895:37;;;;;;;;;;;;;;;;;;;;;6623:316::o;7345:2190::-;7472:27;;;7464:95;;;;;;;8831:2:37;7464:95:11;;;8813:21:37;8870:2;8850:18;;;8843:30;8909:34;8889:18;;;8882:62;8980:25;8960:18;;;8953:53;9023:19;;7464:95:11;8629:419:37;7464:95:11;7654:30;;;7679:4;7654:30;;7646:89;;;;;;;9255:2:37;7646:89:11;;;9237:21:37;9294:2;9274:18;;;9267:30;9333:34;9313:18;;;9306:62;9404:16;9384:18;;;9377:44;9438:19;;7646:89:11;9053:410:37;7646:89:11;7846:40;;;7819:24;7846:40;;;;;;;;;;;:65;7952:40;;;;;8020:1;7952:25;;;:40;;;;;;:65;7846;;;;;;;7819:24;7952:69;;;:::i;:::-;7921:100;;8123:20;8103:16;:40;8099:387;;8181:40;;;8159:19;8181:40;;;:25;;;:40;;;;;:80;;8240:20;;8181:80;;;;;;:::i;:::-;;;;;;;;;;;;;;8275:40;;;;;:25;;;:40;;;;;;;:76;;8181:80;;;;;;;;;;;;;;-1:-1:-1;8181:80:11;;8275:40;8334:16;;8275:76;;;;;;:::i;:::-;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;8380:43;;;;;;;;;;;;;:95;;;;;;;;;;;;8099:387;8531:40;;;;;;;:25;;;:40;;;;;:64;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8612:40;;;;;;;;;;;8605:47;8747:25;8743:786;;8914:17;;;:24;8879:32;;8914:28;;8941:1;;8914:28;:::i;:::-;8987:40;;;8956:28;8987:40;;;:25;;;;:40;;;;;;:61;;8879:63;;-1:-1:-1;9066:48:11;;;9062:338;;9134:24;9161:2;:17;;9179:24;9161:43;;;;;;;;:::i;:::-;;;;;;;;;;;9222:17;;;:39;;9161:43;;;;;-1:-1:-1;9161:43:11;;9240:20;;9222:39;;;;;;:::i;:::-;;;;;;;;;;;;;:58;;;;;;;;;;;9298:43;;;;;;-1:-1:-1;9298:25:11;;;:43;;;;;;:64;:87;;;9062:338;9413:2;:17;;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;9457:40;;;;9413:23;9457:25;;;:40;;;;;;:61;9450:68;-1:-1:-1;;7446:2089:11;;7345:2190;;;:::o;375:184:37:-;427:77;424:1;417:88;524:4;521:1;514:15;548:4;545:1;538:15;564:184;616:77;613:1;606:88;713:4;710:1;703:15;737:4;734:1;727:15;1161:184;1213:77;1210:1;1203:88;1310:4;1307:1;1300:15;1334:4;1331:1;1324:15;1350:195;1389:3;1420:66;1413:5;1410:77;1407:103;;;1490:18;;:::i;:::-;-1:-1:-1;1537:1:37;1526:13;;1350:195::o;1682:258::-;1754:1;1764:113;1778:6;1775:1;1772:13;1764:113;;;1854:11;;;1848:18;1835:11;;;1828:39;1800:2;1793:10;1764:113;;;1895:6;1892:1;1889:13;1886:48;;;-1:-1:-1;;1930:1:37;1912:16;;1905:27;1682:258::o;1945:316::-;1986:3;2024:5;2018:12;2051:6;2046:3;2039:19;2067:63;2123:6;2116:4;2111:3;2107:14;2100:4;2093:5;2089:16;2067:63;:::i;:::-;2175:2;2163:15;2180:66;2159:88;2150:98;;;;2250:4;2146:109;;1945:316;-1:-1:-1;;1945:316:37:o;2266:2272::-;2532:4;2561:2;2601;2590:9;2586:18;2631:2;2620:9;2613:21;2654:6;2689;2683:13;2720:6;2712;2705:22;2746:3;2736:13;;2780:2;2769:9;2765:18;2758:25;;2842:2;2832:6;2829:1;2825:14;2814:9;2810:30;2806:39;2864:4;2903:2;2895:6;2891:15;2924:1;2934:1433;2948:6;2945:1;2942:13;2934:1433;;;3037:66;3025:9;3017:6;3013:22;3009:95;3004:3;2997:108;3134:6;3128:13;3180:2;3172:6;3168:15;3226:42;3221:2;3215:9;3211:58;3203:6;3196:74;3317:2;3313;3309:11;3303:18;3361:1;3347:12;3344:19;3334:227;;3405:77;3402:1;3395:88;3510:4;3507:1;3500:15;3542:4;3539:1;3532:15;3334:227;3581:15;;;3574:37;3634:4;3679:11;;;3673:18;3711:15;;;3704:27;;;3792:21;;3826:24;;;;3916:23;;;;-1:-1:-1;;3872:15:37;;;;3977:282;3993:8;3988:3;3985:17;3977:282;;;4074:15;;4091:66;4070:88;4056:103;;4228:17;;;;4021:1;4012:11;;;;;4185:14;;;;3977:282;;;-1:-1:-1;4345:12:37;;;;4282:5;-1:-1:-1;;;4310:15:37;;;;2970:1;2963:9;2934:1433;;;-1:-1:-1;;1627:42:37;1616:54;;4403:18;;;1604:67;4460:22;;;4453:4;4438:20;;4431:52;4500:32;4464:6;4517;4500:32;:::i;:::-;4492:40;2266:2272;-1:-1:-1;;;;;;;;;;2266:2272:37:o;5402:274::-;5531:3;5569:6;5563:13;5585:53;5631:6;5626:3;5619:4;5611:6;5607:17;5585:53;:::i;:::-;5654:16;;;;;5402:274;-1:-1:-1;;5402:274:37:o;5681:219::-;5830:2;5819:9;5812:21;5793:4;5850:44;5890:2;5879:9;5875:18;5867:6;5850:44;:::i;:::-;5842:52;5681:219;-1:-1:-1;;;5681:219:37:o;7559:217::-;7597:3;7625:26;7686:2;7679:5;7675:14;7713:2;7704:7;7701:15;7698:41;;;7719:18;;:::i;:::-;7768:1;7755:15;;7559:217;-1:-1:-1;;;7559:217:37:o;9468:125::-;9508:4;9536:1;9533;9530:8;9527:34;;;9541:18;;:::i;:::-;-1:-1:-1;9578:9:37;;9468:125::o;9598:184::-;9650:77;9647:1;9640:88;9747:4;9744:1;9737:15;9771:4;9768:1;9761:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "1338600", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contractOwner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"initContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct Diamond.Initialization[]\",\"name\":\"_initializations\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_contractOwner\":\"the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\",\"_diamondCut\":\"the list of facet to add\",\"_initializations\":\"the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"This construct a diamond contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/Diamond.sol\":\"Diamond\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/Diamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\",\"keccak256\":\"0x9f459a9f18d5429b0dd40e60b4a67a27d2b94693c4d190ed9dd7034a894c1eb6\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "constructor": { - "notice": "This construct a diamond contract" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/DiamondCutFacet.json b/extendedArtifactsTron/DiamondCutFacet.json deleted file mode 100644 index cf9186a..0000000 --- a/extendedArtifactsTron/DiamondCutFacet.json +++ /dev/null @@ -1,10112 +0,0 @@ -{ - "contractName": "DiamondCutFacet", - "sourceName": "solc_0.8/diamond/facets/DiamondCutFacet.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50611d4a8061003a6000396000f3fe608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100455760003560e01c80631f931c1c1461004a575b600080fd5b61005d6100583660046116a3565b61005f565b005b6100676100b8565b6100b16100748587611820565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061018892505050565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6004015473ffffffffffffffffffffffffffffffffffffffff163314610186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b565b60005b83518110156103815760008482815181106101a8576101a861197c565b6020026020010151602001519050600060028111156101c9576101c96119ab565b8160028111156101db576101db6119ab565b141561022a576102258583815181106101f6576101f661197c565b6020026020010151600001518684815181106102145761021461197c565b6020026020010151604001516103cc565b61036e565b600181600281111561023e5761023e6119ab565b1415610288576102258583815181106102595761025961197c565b6020026020010151600001518684815181106102775761027761197c565b602002602001015160400151610778565b600281600281111561029c5761029c6119ab565b14156102e6576102258583815181106102b7576102b761197c565b6020026020010151600001518684815181106102d5576102d561197c565b602002602001015160400151610b35565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e00000000000000000000000000000000000000000000000000606482015260840161017d565b508061037981611a09565b91505061018b565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516103b593929190611ab8565b60405180910390a16103c78282610d28565b505050565b600081511161045d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f20637574000000000000000000000000000000000000000000606482015260840161017d565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f6520616464726573732830290000000000000000000000000000000000000000606482015260840161017d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610566576105668285610fdb565b60005b83518110156100b15760008482815181106105865761058661197c565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16801561066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c7265616479206578697374730000000000000000000000606482015260840161017d565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff0000000000000000000000000000000000000000161790558361076081611c20565b9450505050808061077090611a09565b915050610569565b6000815111610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f20637574000000000000000000000000000000000000000000606482015260840161017d565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166108cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f6520616464726573732830290000000000000000000000000000000000000000606482015260840161017d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610912576109128285610fdb565b60005b83518110156100b15760008482815181106109325761093261197c565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606482015260840161017d565b610a2885828461106a565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610b1d81611c20565b94505050508080610b2d90611a09565b915050610915565b6000815111610bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f20637574000000000000000000000000000000000000000000606482015260840161017d565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610c8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d757374206265206164647265737328302900000000000000000000606482015260840161017d565b60005b8251811015610d22576000838281518110610cab57610cab61197c565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610d0d84828461106a565b50508080610d1a90611a09565b915050610c8e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610dd657805115610dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606482015260840161017d565b5050565b6000815111610e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606482015260840161017d565b73ffffffffffffffffffffffffffffffffffffffff82163014610ea657610ea682604051806060016040528060288152602001611cc9602891396115dc565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610ece9190611c4c565b600060405180830381855af49150503d8060008114610f09576040519150601f19603f3d011682016040523d82523d6000602084013e610f0e565b606091505b509150915081610d2257805115610f5357806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017d9190611c68565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560448201527f7665727465640000000000000000000000000000000000000000000000000000606482015260840161017d565b610ffd81604051806060016040528060248152602001611cf1602491396115dc565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff821661110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606482015260840161017d565b73ffffffffffffffffffffffffffffffffffffffff82163014156111b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e000000000000000000000000000000000000606482015260840161017d565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff16929161123d91611c82565b90508082146113845773ffffffffffffffffffffffffffffffffffffffff84166000908152600186016020526040812080548390811061127f5761127f61197c565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106112dd576112dd61197c565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff8416600090815260018601602052604090208054806113ba576113ba611c99565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff00000000000000000000000000000000000000000000000000000000851682528690526040812055806100b157600285015460009061144f90600190611c82565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260018089016020526040909120015490915080821461153d57600087600201838154811061149b5761149b61197c565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff90921692508291849081106114d9576114d961197c565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b8660020180548061155057611550611c99565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b813b8181610d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017d9190611c68565b6000813574ffffffffffffffffffffffffffffffffffffffffff8116811461163e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff1692915050565b60008083601f84011261166c57600080fd5b50813567ffffffffffffffff81111561168457600080fd5b60208301915083602082850101111561169c57600080fd5b9250929050565b6000806000806000606086880312156116bb57600080fd5b853567ffffffffffffffff808211156116d357600080fd5b818801915088601f8301126116e757600080fd5b8135818111156116f657600080fd5b8960208260051b850101111561170b57600080fd5b6020830197508096505061172160208901611617565b9450604088013591508082111561173757600080fd5b506117448882890161165a565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156117a7576117a7611755565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117f4576117f4611755565b604052919050565b600067ffffffffffffffff82111561181657611816611755565b5060051b60200190565b600061183361182e846117fc565b6117ad565b83815260208082019190600586811b86013681111561185157600080fd5b865b8181101561196f57803567ffffffffffffffff808211156118745760008081fd5b818a0191506060823603121561188a5760008081fd5b611892611784565b61189b83611617565b815286830135600381106118af5760008081fd5b81880152604083810135838111156118c75760008081fd5b939093019236601f8501126118de57600092508283fd5b833592506118ee61182e846117fc565b83815292871b8401880192888101903685111561190b5760008081fd5b948901945b848610156119585785357fffffffff00000000000000000000000000000000000000000000000000000000811681146119495760008081fd5b82529489019490890190611910565b918301919091525088525050948301948301611853565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611a3b57611a3b6119da565b5060010190565b60005b83811015611a5d578181015183820152602001611a45565b83811115610d225750506000910152565b60008151808452611a86816020860160208601611a42565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611be3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611b6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015611bce5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611b8c565b50978501979550505090820190600101611ae1565b505073ffffffffffffffffffffffffffffffffffffffff8a16908801528681036040880152611c128189611a6e565b9a9950505050505050505050565b60006bffffffffffffffffffffffff80831681811415611c4257611c426119da565b6001019392505050565b60008251611c5e818460208701611a42565b9190910192915050565b602081526000611c7b6020830184611a6e565b9392505050565b600082821015611c9457611c946119da565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26474726f6e582212207bb7a0cff8739ef51a1b1ed5e2bbf8a5896eb4a1282f086ca6e37ee5e85f0f2164736f6c634300080b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100455760003560e01c80631f931c1c1461004a575b600080fd5b61005d6100583660046116a3565b61005f565b005b6100676100b8565b6100b16100748587611820565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061018892505050565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6004015473ffffffffffffffffffffffffffffffffffffffff163314610186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b565b60005b83518110156103815760008482815181106101a8576101a861197c565b6020026020010151602001519050600060028111156101c9576101c96119ab565b8160028111156101db576101db6119ab565b141561022a576102258583815181106101f6576101f661197c565b6020026020010151600001518684815181106102145761021461197c565b6020026020010151604001516103cc565b61036e565b600181600281111561023e5761023e6119ab565b1415610288576102258583815181106102595761025961197c565b6020026020010151600001518684815181106102775761027761197c565b602002602001015160400151610778565b600281600281111561029c5761029c6119ab565b14156102e6576102258583815181106102b7576102b761197c565b6020026020010151600001518684815181106102d5576102d561197c565b602002602001015160400151610b35565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560448201527f74416374696f6e00000000000000000000000000000000000000000000000000606482015260840161017d565b508061037981611a09565b91505061018b565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516103b593929190611ab8565b60405180910390a16103c78282610d28565b505050565b600081511161045d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f20637574000000000000000000000000000000000000000000606482015260840161017d565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff8316610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f6520616464726573732830290000000000000000000000000000000000000000606482015260840161017d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610566576105668285610fdb565b60005b83518110156100b15760008482815181106105865761058661197c565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16801561066b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c7265616479206578697374730000000000000000000000606482015260840161017d565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff0000000000000000000000000000000000000000161790558361076081611c20565b9450505050808061077090611a09565b915050610569565b6000815111610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f20637574000000000000000000000000000000000000000000606482015260840161017d565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff83166108cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260448201527f6520616464726573732830290000000000000000000000000000000000000000606482015260840161017d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001820160205260409020546bffffffffffffffffffffffff8116610912576109128285610fdb565b60005b83518110156100b15760008482815181106109325761093261197c565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606482015260840161017d565b610a2885828461106a565b7fffffffff000000000000000000000000000000000000000000000000000000008216600081815260208781526040808320805473ffffffffffffffffffffffffffffffffffffffff908116740100000000000000000000000000000000000000006bffffffffffffffffffffffff8c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281547fffffffffffffffffffffffff00000000000000000000000000000000000000001617905583610b1d81611c20565b94505050508080610b2d90611a09565b915050610915565b6000815111610bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660448201527f6163657420746f20637574000000000000000000000000000000000000000000606482015260840161017d565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c73ffffffffffffffffffffffffffffffffffffffff831615610c8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d757374206265206164647265737328302900000000000000000000606482015260840161017d565b60005b8251811015610d22576000838281518110610cab57610cab61197c565b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610d0d84828461106a565b50508080610d1a90611a09565b915050610c8e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610dd657805115610dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606482015260840161017d565b5050565b6000815111610e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606482015260840161017d565b73ffffffffffffffffffffffffffffffffffffffff82163014610ea657610ea682604051806060016040528060288152602001611cc9602891396115dc565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610ece9190611c4c565b600060405180830381855af49150503d8060008114610f09576040519150601f19603f3d011682016040523d82523d6000602084013e610f0e565b606091505b509150915081610d2257805115610f5357806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017d9190611c68565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560448201527f7665727465640000000000000000000000000000000000000000000000000000606482015260840161017d565b610ffd81604051806060016040528060248152602001611cf1602491396115dc565b60028201805473ffffffffffffffffffffffffffffffffffffffff90921660008181526001948501602090815260408220860185905594840183559182529290200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b73ffffffffffffffffffffffffffffffffffffffff821661110d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606482015260840161017d565b73ffffffffffffffffffffffffffffffffffffffff82163014156111b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201527f7461626c652066756e6374696f6e000000000000000000000000000000000000606482015260840161017d565b7fffffffff0000000000000000000000000000000000000000000000000000000081166000908152602084815260408083205473ffffffffffffffffffffffffffffffffffffffff86168452600180880190935290832054740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff16929161123d91611c82565b90508082146113845773ffffffffffffffffffffffffffffffffffffffff84166000908152600186016020526040812080548390811061127f5761127f61197c565b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106112dd576112dd61197c565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff0000000000000000000000000000000000000000000000000000000092909216825286905260409020805473ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000006bffffffffffffffffffffffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff8416600090815260018601602052604090208054806113ba576113ba611c99565b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff00000000000000000000000000000000000000000000000000000000851682528690526040812055806100b157600285015460009061144f90600190611c82565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260018089016020526040909120015490915080821461153d57600087600201838154811061149b5761149b61197c565b60009182526020909120015460028901805473ffffffffffffffffffffffffffffffffffffffff90921692508291849081106114d9576114d961197c565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055929091168152600189810190925260409020018190555b8660020180548061155057611550611c99565b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff88168252600189810190915260408220015550505050505050565b813b8181610d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017d9190611c68565b6000813574ffffffffffffffffffffffffffffffffffffffffff8116811461163e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff1692915050565b60008083601f84011261166c57600080fd5b50813567ffffffffffffffff81111561168457600080fd5b60208301915083602082850101111561169c57600080fd5b9250929050565b6000806000806000606086880312156116bb57600080fd5b853567ffffffffffffffff808211156116d357600080fd5b818801915088601f8301126116e757600080fd5b8135818111156116f657600080fd5b8960208260051b850101111561170b57600080fd5b6020830197508096505061172160208901611617565b9450604088013591508082111561173757600080fd5b506117448882890161165a565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156117a7576117a7611755565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117f4576117f4611755565b604052919050565b600067ffffffffffffffff82111561181657611816611755565b5060051b60200190565b600061183361182e846117fc565b6117ad565b83815260208082019190600586811b86013681111561185157600080fd5b865b8181101561196f57803567ffffffffffffffff808211156118745760008081fd5b818a0191506060823603121561188a5760008081fd5b611892611784565b61189b83611617565b815286830135600381106118af5760008081fd5b81880152604083810135838111156118c75760008081fd5b939093019236601f8501126118de57600092508283fd5b833592506118ee61182e846117fc565b83815292871b8401880192888101903685111561190b5760008081fd5b948901945b848610156119585785357fffffffff00000000000000000000000000000000000000000000000000000000811681146119495760008081fd5b82529489019490890190611910565b918301919091525088525050948301948301611853565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611a3b57611a3b6119da565b5060010190565b60005b83811015611a5d578181015183820152602001611a45565b83811115610d225750506000910152565b60008151808452611a86816020860160208601611a42565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b84811015611be3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8503018652815188850173ffffffffffffffffffffffffffffffffffffffff82511686528482015160038110611b6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015611bce5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928601926001929092019190860190611b8c565b50978501979550505090820190600101611ae1565b505073ffffffffffffffffffffffffffffffffffffffff8a16908801528681036040880152611c128189611a6e565b9a9950505050505050505050565b60006bffffffffffffffffffffffff80831681811415611c4257611c426119da565b6001019392505050565b60008251611c5e818460208701611a42565b9190910192915050565b602081526000611c7b6020830184611a6e565b9392505050565b600082821015611c9457611c946119da565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26474726f6e582212207bb7a0cff8739ef51a1b1ed5e2bbf8a5896eb4a1282f086ca6e37ee5e85f0f2164736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": { - "params": { - "_calldata": "A function call, including function selector and arguments _calldata is executed with delegatecall on _init", - "_diamondCut": "Contains the facet addresses and function selectors", - "_init": "The address of the contract or facet to execute _calldata" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1D4A DUP1 PUSH2 0x3A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x45 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1F931C1C EQ PUSH2 0x4A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5D PUSH2 0x58 CALLDATASIZE PUSH1 0x4 PUSH2 0x16A3 JUMP JUMPDEST PUSH2 0x5F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x67 PUSH2 0xB8 JUMP JUMPDEST PUSH2 0xB1 PUSH2 0x74 DUP6 DUP8 PUSH2 0x1820 JUMP JUMPDEST DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x188 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x186 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A204D75737420626520636F6E7472616374206F776E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6572000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x381 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A8 JUMPI PUSH2 0x1A8 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C9 JUMPI PUSH2 0x1C9 PUSH2 0x19AB JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1DB JUMPI PUSH2 0x1DB PUSH2 0x19AB JUMP JUMPDEST EQ ISZERO PUSH2 0x22A JUMPI PUSH2 0x225 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1F6 JUMPI PUSH2 0x1F6 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x214 JUMPI PUSH2 0x214 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x3CC JUMP JUMPDEST PUSH2 0x36E JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x23E JUMPI PUSH2 0x23E PUSH2 0x19AB JUMP JUMPDEST EQ ISZERO PUSH2 0x288 JUMPI PUSH2 0x225 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x259 JUMPI PUSH2 0x259 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x277 JUMPI PUSH2 0x277 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x778 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x29C JUMPI PUSH2 0x29C PUSH2 0x19AB JUMP JUMPDEST EQ ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x225 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2B7 JUMPI PUSH2 0x2B7 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2D5 JUMPI PUSH2 0x2D5 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xB35 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74416374696F6E00000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST POP DUP1 PUSH2 0x379 DUP2 PUSH2 0x1A09 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x18B JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x3B5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1AB8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x3C7 DUP3 DUP3 PUSH2 0xD28 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x45D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x521 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x566 JUMPI PUSH2 0x566 DUP3 DUP6 PUSH2 0xFDB JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xB1 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x586 JUMPI PUSH2 0x586 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x66B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E207468617420616C7265616479206578697374730000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0x760 DUP2 PUSH2 0x1C20 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0x770 SWAP1 PUSH2 0x1A09 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x569 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x809 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x8CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x912 JUMPI PUSH2 0x912 DUP3 DUP6 PUSH2 0xFDB JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xB1 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x932 JUMPI PUSH2 0x932 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 EQ ISZERO PUSH2 0xA1D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH2 0xA28 DUP6 DUP3 DUP5 PUSH2 0x106A JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xB1D DUP2 PUSH2 0x1C20 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xB2D SWAP1 PUSH2 0x1A09 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x915 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xBC6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO PUSH2 0xC8B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x657373206D757374206265206164647265737328302900000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xD22 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xCAB JUMPI PUSH2 0xCAB PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xD0D DUP5 DUP3 DUP5 PUSH2 0x106A JUMP JUMPDEST POP POP DUP1 DUP1 PUSH2 0xD1A SWAP1 PUSH2 0x1A09 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC8E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xDD6 JUMPI DUP1 MLOAD ISZERO PUSH2 0xDD2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xE67 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0xEA6 JUMPI PUSH2 0xEA6 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CC9 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xECE SWAP2 SWAP1 PUSH2 0x1C4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xF09 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xF0E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0xD22 JUMPI DUP1 MLOAD ISZERO PUSH2 0xF53 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17D SWAP2 SWAP1 PUSH2 0x1C68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7665727465640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH2 0xFFD DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CF1 PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x110D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ ISZERO PUSH2 0x11B3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7461626C652066756E6374696F6E000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP2 DIV PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 PUSH2 0x123D SWAP2 PUSH2 0x1C82 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0x1384 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x127F JUMPI PUSH2 0x127F PUSH2 0x197C JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x12DD JUMPI PUSH2 0x12DD PUSH2 0x197C JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x13BA JUMPI PUSH2 0x13BA PUSH2 0x1C99 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE DUP1 PUSH2 0xB1 JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x144F SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x1C82 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x153D JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x149B JUMPI PUSH2 0x149B PUSH2 0x197C JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x14D9 JUMPI PUSH2 0x14D9 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0x1550 JUMPI PUSH2 0x1550 PUSH2 0x1C99 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 EXTCODESIZE DUP2 DUP2 PUSH2 0xD22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17D SWAP2 SWAP1 PUSH2 0x1C68 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x163E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x166C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x169C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x16BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x16D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x16E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x16F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x170B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP8 POP DUP1 SWAP7 POP POP PUSH2 0x1721 PUSH1 0x20 DUP10 ADD PUSH2 0x1617 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1737 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1744 DUP9 DUP3 DUP10 ADD PUSH2 0x165A JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x17A7 JUMPI PUSH2 0x17A7 PUSH2 0x1755 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x17F4 JUMPI PUSH2 0x17F4 PUSH2 0x1755 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1816 JUMPI PUSH2 0x1816 PUSH2 0x1755 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1833 PUSH2 0x182E DUP5 PUSH2 0x17FC JUMP JUMPDEST PUSH2 0x17AD JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP2 SWAP1 PUSH1 0x5 DUP7 DUP2 SHL DUP7 ADD CALLDATASIZE DUP2 GT ISZERO PUSH2 0x1851 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x196F JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1874 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP PUSH1 0x60 DUP3 CALLDATASIZE SUB SLT ISZERO PUSH2 0x188A JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1892 PUSH2 0x1784 JUMP JUMPDEST PUSH2 0x189B DUP4 PUSH2 0x1617 JUMP JUMPDEST DUP2 MSTORE DUP7 DUP4 ADD CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x18AF JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP9 ADD MSTORE PUSH1 0x40 DUP4 DUP2 ADD CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x18C7 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP3 CALLDATASIZE PUSH1 0x1F DUP6 ADD SLT PUSH2 0x18DE JUMPI PUSH1 0x0 SWAP3 POP DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0x18EE PUSH2 0x182E DUP5 PUSH2 0x17FC JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP3 DUP8 SHL DUP5 ADD DUP9 ADD SWAP3 DUP9 DUP2 ADD SWAP1 CALLDATASIZE DUP6 GT ISZERO PUSH2 0x190B JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP5 DUP10 ADD SWAP5 JUMPDEST DUP5 DUP7 LT ISZERO PUSH2 0x1958 JUMPI DUP6 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x1949 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 MSTORE SWAP5 DUP10 ADD SWAP5 SWAP1 DUP10 ADD SWAP1 PUSH2 0x1910 JUMP JUMPDEST SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 MSTORE POP POP SWAP5 DUP4 ADD SWAP5 DUP4 ADD PUSH2 0x1853 JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1A3B JUMPI PUSH2 0x1A3B PUSH2 0x19DA JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1A5D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A45 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD22 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1A86 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1A42 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1BE3 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP11 DUP6 SUB ADD DUP7 MSTORE DUP2 MLOAD DUP9 DUP6 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP5 DUP3 ADD MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x1B6A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x1BCE JUMPI DUP4 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x1B8C JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1AE1 JUMP JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x1C12 DUP2 DUP10 PUSH2 0x1A6E JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x1C42 JUMPI PUSH2 0x1C42 PUSH2 0x19DA JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1C5E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1A42 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C7B PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1A6E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1C94 JUMPI PUSH2 0x1C94 PUSH2 0x19DA JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2647472 PUSH16 0x6E582212207BB7A0CFF8739EF51A1B1E NATIVEFREEZE 0xE2 0xBB 0xF8 0xA5 DUP10 PUSH15 0xB4A1282F086CA6E37EE5E85F0F2164 PUSH20 0x6F6C634300080B00330000000000000000000000 ", - "sourceMap": "482:747:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@addFacet_1286": { - "entryPoint": 4059, - "id": 1286, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@addFunction_1327": { - "entryPoint": null, - "id": 1327, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@addFunctions_1084": { - "entryPoint": 972, - "id": 1084, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@diamondCut_178": { - "entryPoint": 95, - "id": 178, - "parameterSlots": 5, - "returnSlots": 0 - }, - "@diamondCut_983": { - "entryPoint": 392, - "id": 983, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@enforceHasContractCode_1590": { - "entryPoint": 5596, - "id": 1590, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@enforceIsContractOwner_869": { - "entryPoint": 184, - "id": 869, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@initializeDiamondCut_1571": { - "entryPoint": 3368, - "id": 1571, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@removeFunction_1494": { - "entryPoint": 4202, - "id": 1494, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@removeFunctions_1253": { - "entryPoint": 2869, - "id": 1253, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@replaceFunctions_1188": { - "entryPoint": 1912, - "id": 1188, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 5655, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_bytes_calldata": { - "entryPoint": 5722, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptrt_addresst_bytes_calldata_ptr": { - "entryPoint": 5795, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_encode_address": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_bytes": { - "entryPoint": 6766, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 7244, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 6840, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 7272, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 6061, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory_2944": { - "entryPoint": 6020, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "array_allocation_size_array_struct_FacetCut_dyn": { - "entryPoint": 6140, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 7298, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "convert_array_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 6176, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 6722, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "increment_t_uint256": { - "entryPoint": 6665, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "increment_t_uint96": { - "entryPoint": 7200, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 6618, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x21": { - "entryPoint": 6571, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x31": { - "entryPoint": 7321, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 6524, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 5973, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:15235:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "63:233:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "73:35:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "101:6:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "88:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "88:20:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "77:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "200:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "209:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "212:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "202:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "202:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "202:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "130:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "143:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "152:44:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "139:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "139:58:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "127:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "127:71:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "120:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "120:79:37" - }, - "nodeType": "YulIf", - "src": "117:99:37" - }, - { - "nodeType": "YulAssignment", - "src": "225:65:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "238:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "247:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "234:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "234:56:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "225:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "42:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:37", - "type": "" - } - ], - "src": "14:282:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "373:275:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "422:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "431:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "434:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "424:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "424:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "424:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "401:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "409:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "397:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "397:17:37" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "416:3:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "393:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "393:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "386:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "386:35:37" - }, - "nodeType": "YulIf", - "src": "383:55:37" - }, - { - "nodeType": "YulAssignment", - "src": "447:30:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "470:6:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "457:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "457:20:37" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "447:6:37" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "520:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "529:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "532:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "522:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "522:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "522:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "492:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "500:18:37", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "489:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "489:30:37" - }, - "nodeType": "YulIf", - "src": "486:50:37" - }, - { - "nodeType": "YulAssignment", - "src": "545:29:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "561:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "569:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "557:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "557:17:37" - }, - "variableNames": [ - { - "name": "arrayPos", - "nodeType": "YulIdentifier", - "src": "545:8:37" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "626:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "635:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "638:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "628:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "628:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "628:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "597:6:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "605:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "593:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "593:19:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "614:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "589:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "589:30:37" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "621:3:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "586:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "586:39:37" - }, - "nodeType": "YulIf", - "src": "583:59:37" - } - ] - }, - "name": "abi_decode_bytes_calldata", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "336:6:37", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "344:3:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "arrayPos", - "nodeType": "YulTypedName", - "src": "352:8:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "362:6:37", - "type": "" - } - ], - "src": "301:347:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "838:824:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "884:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "893:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "896:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "886:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "886:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "886:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "859:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "868:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "855:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "855:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "880:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "851:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "851:32:37" - }, - "nodeType": "YulIf", - "src": "848:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "909:37:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "936:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "923:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "923:23:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "913:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "955:28:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "965:18:37", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "959:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1010:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1019:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1022:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1012:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1012:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1012:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "998:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1006:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "995:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "995:14:37" - }, - "nodeType": "YulIf", - "src": "992:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1035:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1049:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1060:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1045:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1045:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1039:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1115:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1124:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1127:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1117:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1117:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1117:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1094:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1098:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1090:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1090:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1105:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1086:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1086:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1079:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1079:35:37" - }, - "nodeType": "YulIf", - "src": "1076:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1140:30:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1167:2:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1154:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "1154:16:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1144:6:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1197:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1206:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1209:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1199:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1199:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1199:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1185:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1193:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1182:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1182:14:37" - }, - "nodeType": "YulIf", - "src": "1179:34:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1273:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1282:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1285:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1275:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1275:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1275:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1236:2:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1244:1:37", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1247:6:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1240:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1240:14:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1232:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1232:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1257:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1228:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1228:34:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1264:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1225:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1225:47:37" - }, - "nodeType": "YulIf", - "src": "1222:67:37" - }, - { - "nodeType": "YulAssignment", - "src": "1298:23:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1312:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1316:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1308:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1308:13:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1298:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1330:16:37", - "value": { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1340:6:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1330:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1355:50:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1388:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1399:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1384:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1384:20:37" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1365:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "1365:40:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1355:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1414:48:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1447:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1458:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1443:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1443:18:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1430:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "1430:32:37" - }, - "variables": [ - { - "name": "offset_1", - "nodeType": "YulTypedName", - "src": "1418:8:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1491:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1500:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1503:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1493:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1493:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1493:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "1477:8:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1487:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1474:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1474:16:37" - }, - "nodeType": "YulIf", - "src": "1471:36:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1516:86:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1572:9:37" - }, - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "1583:8:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1568:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1568:24:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1594:7:37" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nodeType": "YulIdentifier", - "src": "1542:25:37" - }, - "nodeType": "YulFunctionCall", - "src": "1542:60:37" - }, - "variables": [ - { - "name": "value3_1", - "nodeType": "YulTypedName", - "src": "1520:8:37", - "type": "" - }, - { - "name": "value4_1", - "nodeType": "YulTypedName", - "src": "1530:8:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1611:18:37", - "value": { - "name": "value3_1", - "nodeType": "YulIdentifier", - "src": "1621:8:37" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "1611:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1638:18:37", - "value": { - "name": "value4_1", - "nodeType": "YulIdentifier", - "src": "1648:8:37" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "1638:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptrt_addresst_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "772:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "783:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "795:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "803:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "811:6:37", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "819:6:37", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "827:6:37", - "type": "" - } - ], - "src": "653:1009:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1699:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1716:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1719:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1709:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1709:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1709:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1813:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1816:4:37", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1806:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1806:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1806:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1837:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1840:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1830:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1830:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1830:15:37" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "1667:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1902:207:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1912:19:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1928:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1922:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1922:9:37" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1912:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1940:35:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1962:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1970:4:37", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1958:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1958:17:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1944:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2050:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "2052:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "2052:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2052:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1993:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2005:18:37", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1990:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1990:34:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2029:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2041:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2026:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2026:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1987:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1987:62:37" - }, - "nodeType": "YulIf", - "src": "1984:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2088:2:37", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2092:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2081:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2081:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2081:22:37" - } - ] - }, - "name": "allocate_memory_2944", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1891:6:37", - "type": "" - } - ], - "src": "1856:253:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2159:289:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2169:19:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2185:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2179:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2179:9:37" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2169:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2197:117:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2219:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "2235:4:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2241:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2231:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2231:13:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2246:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2227:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2227:86:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2215:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2215:99:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "2201:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2389:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "2391:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "2391:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2391:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2332:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2344:18:37", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2329:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2329:34:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2368:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2380:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2365:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2365:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "2326:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2326:62:37" - }, - "nodeType": "YulIf", - "src": "2323:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2427:2:37", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2431:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2420:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2420:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2420:22:37" - } - ] - }, - "name": "allocate_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "2139:4:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "2148:6:37", - "type": "" - } - ], - "src": "2114:334:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2530:114:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2574:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "2576:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "2576:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2576:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2546:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2554:18:37", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2543:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2543:30:37" - }, - "nodeType": "YulIf", - "src": "2540:56:37" - }, - { - "nodeType": "YulAssignment", - "src": "2605:33:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2621:1:37", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2624:6:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2617:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2617:14:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2633:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2613:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2613:25:37" - }, - "variableNames": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "2605:4:37" - } - ] - } - ] - }, - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2510:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "2521:4:37", - "type": "" - } - ], - "src": "2453:191:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2831:2587:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2841:83:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2916:6:37" - } - ], - "functionName": { - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulIdentifier", - "src": "2868:47:37" - }, - "nodeType": "YulFunctionCall", - "src": "2868:55:37" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "2852:15:37" - }, - "nodeType": "YulFunctionCall", - "src": "2852:72:37" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "2845:3:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2933:16:37", - "value": { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2946:3:37" - }, - "variables": [ - { - "name": "dst_1", - "nodeType": "YulTypedName", - "src": "2937:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2965:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2970:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2958:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2958:19:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2958:19:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2986:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2996:4:37", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2990:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3009:19:37", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3020:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3025:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3016:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3016:12:37" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3009:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3037:11:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3047:1:37", - "type": "", - "value": "5" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "3041:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3057:41:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3075:5:37" - }, - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "3086:2:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3090:6:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "3082:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3082:15:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3071:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3071:27:37" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "3061:6:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3137:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3146:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3149:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3139:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3139:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3139:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "3113:6:37" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "3121:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "3121:14:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3110:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3110:26:37" - }, - "nodeType": "YulIf", - "src": "3107:46:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3162:16:37", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3173:5:37" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "3166:3:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3243:2142:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3257:36:37", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3289:3:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3276:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "3276:17:37" - }, - "variables": [ - { - "name": "innerOffset", - "nodeType": "YulTypedName", - "src": "3261:11:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3306:28:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3316:18:37", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "3310:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3382:74:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3400:11:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3410:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "3404:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3435:2:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "3439:2:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3428:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3428:14:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3428:14:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "3353:11:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "3366:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3350:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3350:19:37" - }, - "nodeType": "YulIf", - "src": "3347:109:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3469:33:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3483:5:37" - }, - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "3490:11:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3479:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3479:23:37" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "3473:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3565:74:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3583:11:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3593:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_6", - "nodeType": "YulTypedName", - "src": "3587:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "3618:2:37" - }, - { - "name": "_6", - "nodeType": "YulIdentifier", - "src": "3622:2:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3611:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3611:14:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3611:14:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "3526:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "3526:14:37" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "3542:2:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3522:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3522:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3547:4:37", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3518:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3518:34:37" - }, - "nodeType": "YulIf", - "src": "3515:124:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3652:37:37", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_2944", - "nodeType": "YulIdentifier", - "src": "3667:20:37" - }, - "nodeType": "YulFunctionCall", - "src": "3667:22:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "3656:7:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "3709:7:37" - }, - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "3737:2:37" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "3718:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "3718:22:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3702:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3702:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3702:39:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3754:40:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "3786:2:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3790:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3782:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3782:11:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3769:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "3769:25:37" - }, - "variables": [ - { - "name": "value_2", - "nodeType": "YulTypedName", - "src": "3758:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3845:74:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3863:11:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3873:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_7", - "nodeType": "YulTypedName", - "src": "3867:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "3898:2:37" - }, - { - "name": "_7", - "nodeType": "YulIdentifier", - "src": "3902:2:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3891:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3891:14:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3891:14:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "3820:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3829:1:37", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3817:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3817:14:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3810:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3810:22:37" - }, - "nodeType": "YulIf", - "src": "3807:112:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "3943:7:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3952:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3939:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3939:16:37" - }, - { - "name": "value_2", - "nodeType": "YulIdentifier", - "src": "3957:7:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3932:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3932:33:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3932:33:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3978:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3988:2:37", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_8", - "nodeType": "YulTypedName", - "src": "3982:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4003:39:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "4034:2:37" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "4038:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4030:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4030:11:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4017:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "4017:25:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "4007:6:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4085:74:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4103:11:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4113:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_9", - "nodeType": "YulTypedName", - "src": "4107:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "4138:2:37" - }, - { - "name": "_9", - "nodeType": "YulIdentifier", - "src": "4142:2:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4131:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4131:14:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4131:14:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4061:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "4069:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4058:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "4058:14:37" - }, - "nodeType": "YulIf", - "src": "4055:104:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4172:26:37", - "value": { - "arguments": [ - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "4187:2:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4191:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4183:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4183:15:37" - }, - "variables": [ - { - "name": "_10", - "nodeType": "YulTypedName", - "src": "4176:3:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4270:77:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4288:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4299:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_11", - "nodeType": "YulTypedName", - "src": "4292:3:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "4324:3:37" - }, - { - "name": "_11", - "nodeType": "YulIdentifier", - "src": "4329:3:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4317:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4317:16:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4317:16:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "4229:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4234:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4225:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4225:14:37" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "4241:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "4241:14:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4221:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4221:35:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4214:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4214:43:37" - }, - "nodeType": "YulIf", - "src": "4211:136:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4360:28:37", - "value": { - "arguments": [ - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "4384:3:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4371:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "4371:17:37" - }, - "variables": [ - { - "name": "_12", - "nodeType": "YulTypedName", - "src": "4364:3:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4401:82:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "4478:3:37" - } - ], - "functionName": { - "name": "array_allocation_size_array_struct_FacetCut_dyn", - "nodeType": "YulIdentifier", - "src": "4430:47:37" - }, - "nodeType": "YulFunctionCall", - "src": "4430:52:37" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "4414:15:37" - }, - "nodeType": "YulFunctionCall", - "src": "4414:69:37" - }, - "variables": [ - { - "name": "dst_2", - "nodeType": "YulTypedName", - "src": "4405:5:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4496:18:37", - "value": { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "4509:5:37" - }, - "variables": [ - { - "name": "dst_3", - "nodeType": "YulTypedName", - "src": "4500:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "4534:5:37" - }, - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "4541:3:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4527:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4527:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4527:18:37" - }, - { - "nodeType": "YulAssignment", - "src": "4558:23:37", - "value": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "4571:5:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4578:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4567:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4567:14:37" - }, - "variableNames": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "4558:5:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4594:47:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "4618:3:37" - }, - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "4627:2:37" - }, - { - "name": "_12", - "nodeType": "YulIdentifier", - "src": "4631:3:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "4623:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4623:12:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4614:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4614:22:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4638:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4610:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4610:31:37" - }, - "variables": [ - { - "name": "srcEnd_1", - "nodeType": "YulTypedName", - "src": "4598:8:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4698:77:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4716:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4727:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_13", - "nodeType": "YulTypedName", - "src": "4720:3:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "4752:3:37" - }, - { - "name": "_13", - "nodeType": "YulIdentifier", - "src": "4757:3:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4745:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4745:16:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4745:16:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd_1", - "nodeType": "YulIdentifier", - "src": "4660:8:37" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "4670:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "4670:14:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4657:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "4657:28:37" - }, - "nodeType": "YulIf", - "src": "4654:121:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4788:25:37", - "value": { - "arguments": [ - { - "name": "_10", - "nodeType": "YulIdentifier", - "src": "4805:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4810:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4801:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4801:12:37" - }, - "variables": [ - { - "name": "src_1", - "nodeType": "YulTypedName", - "src": "4792:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4894:372:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4912:34:37", - "value": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "4940:5:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "4927:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "4927:19:37" - }, - "variables": [ - { - "name": "value_3", - "nodeType": "YulTypedName", - "src": "4916:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5084:89:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "5106:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5117:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_14", - "nodeType": "YulTypedName", - "src": "5110:3:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_14", - "nodeType": "YulIdentifier", - "src": "5146:3:37" - }, - { - "name": "_14", - "nodeType": "YulIdentifier", - "src": "5151:3:37" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5139:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5139:16:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5139:16:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_3", - "nodeType": "YulIdentifier", - "src": "4976:7:37" - }, - { - "arguments": [ - { - "name": "value_3", - "nodeType": "YulIdentifier", - "src": "4989:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4998:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4985:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4985:80:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "4973:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "4973:93:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4966:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4966:101:37" - }, - "nodeType": "YulIf", - "src": "4963:210:37" - }, - { - "expression": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5197:5:37" - }, - { - "name": "value_3", - "nodeType": "YulIdentifier", - "src": "5204:7:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5190:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5190:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5190:22:37" - }, - { - "nodeType": "YulAssignment", - "src": "5229:23:37", - "value": { - "arguments": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5242:5:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "5249:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5238:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5238:14:37" - }, - "variableNames": [ - { - "name": "dst_2", - "nodeType": "YulIdentifier", - "src": "5229:5:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "4837:5:37" - }, - { - "name": "srcEnd_1", - "nodeType": "YulIdentifier", - "src": "4844:8:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "4834:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "4834:19:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "4854:27:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4856:23:37", - "value": { - "arguments": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "4869:5:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4876:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4865:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4865:14:37" - }, - "variableNames": [ - { - "name": "src_1", - "nodeType": "YulIdentifier", - "src": "4856:5:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "4830:3:37", - "statements": [] - }, - "src": "4826:440:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5290:7:37" - }, - { - "name": "_8", - "nodeType": "YulIdentifier", - "src": "5299:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5286:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5286:16:37" - }, - { - "name": "dst_3", - "nodeType": "YulIdentifier", - "src": "5304:5:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5279:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5279:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5279:31:37" - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "5330:3:37" - }, - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "5335:7:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5323:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5323:20:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5323:20:37" - }, - { - "nodeType": "YulAssignment", - "src": "5356:19:37", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "5367:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "5372:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5363:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5363:12:37" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "5356:3:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3198:3:37" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "3203:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3195:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3195:15:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "3211:23:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3213:19:37", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3224:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "3229:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3220:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3220:12:37" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3213:3:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "3191:3:37", - "statements": [] - }, - "src": "3187:2198:37" - }, - { - "nodeType": "YulAssignment", - "src": "5394:18:37", - "value": { - "name": "dst_1", - "nodeType": "YulIdentifier", - "src": "5407:5:37" - }, - "variableNames": [ - { - "name": "converted", - "nodeType": "YulIdentifier", - "src": "5394:9:37" - } - ] - } - ] - }, - "name": "convert_array_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2799:5:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2806:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nodeType": "YulTypedName", - "src": "2817:9:37", - "type": "" - } - ], - "src": "2649:2769:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5597:224:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5614:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5625:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5607:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5607:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5607:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5648:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5659:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5644:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5644:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5664:2:37", - "type": "", - "value": "34" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5637:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5637:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5637:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5687:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5698:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5683:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5683:18:37" - }, - { - "hexValue": "4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5703:34:37", - "type": "", - "value": "LibDiamond: Must be contract own" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5676:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5676:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5676:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5758:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5769:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5754:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5754:18:37" - }, - { - "hexValue": "6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5774:4:37", - "type": "", - "value": "er" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5747:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5747:32:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5747:32:37" - }, - { - "nodeType": "YulAssignment", - "src": "5788:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5800:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5811:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5796:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5796:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5788:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5574:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5588:4:37", - "type": "" - } - ], - "src": "5423:398:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5858:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5875:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5878:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5868:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5868:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5868:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5972:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5975:4:37", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5965:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5965:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5965:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5996:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5999:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5989:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5989:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5989:15:37" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "5826:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6047:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6064:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6067:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6057:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6057:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6057:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6161:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6164:4:37", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6154:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6154:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6154:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6185:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6188:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6178:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6178:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6178:15:37" - } - ] - }, - "name": "panic_error_0x21", - "nodeType": "YulFunctionDefinition", - "src": "6015:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6378:229:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6395:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6406:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6388:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6388:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6388:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6429:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6440:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6425:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6425:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6445:2:37", - "type": "", - "value": "39" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6418:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6418:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6418:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6468:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6479:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6464:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6464:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a20496e636f72726563742046616365744375", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6484:34:37", - "type": "", - "value": "LibDiamondCut: Incorrect FacetCu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6457:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6457:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6457:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6539:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6550:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6535:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6535:18:37" - }, - { - "hexValue": "74416374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6555:9:37", - "type": "", - "value": "tAction" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6528:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6528:37:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6528:37:37" - }, - { - "nodeType": "YulAssignment", - "src": "6574:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6586:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6597:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6582:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6582:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6574:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6355:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "6369:4:37", - "type": "" - } - ], - "src": "6204:403:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6644:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6661:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6664:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6654:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6654:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6654:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6758:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6761:4:37", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6751:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6751:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6751:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6782:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6785:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6775:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "6775:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6775:15:37" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "6612:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6848:148:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6939:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "6941:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "6941:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "6941:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6864:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6871:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "6861:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "6861:77:37" - }, - "nodeType": "YulIf", - "src": "6858:103:37" - }, - { - "nodeType": "YulAssignment", - "src": "6970:20:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6981:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6988:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6977:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "6977:13:37" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "6970:3:37" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6830:5:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "6840:3:37", - "type": "" - } - ], - "src": "6801:195:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7045:83:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7062:3:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7071:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7078:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7067:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7067:54:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7055:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7055:67:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7055:67:37" - } - ] - }, - "name": "abi_encode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7029:5:37", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "7036:3:37", - "type": "" - } - ], - "src": "7001:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7186:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7196:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7205:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "7200:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7265:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "7290:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7295:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7286:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7286:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "7309:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7314:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7305:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7305:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7299:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "7299:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7279:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7279:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7279:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7226:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7229:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "7223:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "7223:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "7237:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "7239:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7248:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7251:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7244:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7244:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7239:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "7219:3:37", - "statements": [] - }, - "src": "7215:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7354:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "7367:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7372:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7363:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7363:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7381:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7356:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7356:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7356:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "7343:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7346:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "7340:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "7340:13:37" - }, - "nodeType": "YulIf", - "src": "7337:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "7164:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "7169:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7174:6:37", - "type": "" - } - ], - "src": "7133:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7445:267:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7455:26:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7475:5:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "7469:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "7469:12:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7459:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7497:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7502:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7490:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "7490:19:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7490:19:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "7544:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7551:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7540:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7540:16:37" - }, - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7562:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7567:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7558:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7558:14:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7574:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "7518:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "7518:63:37" - }, - "nodeType": "YulExpressionStatement", - "src": "7518:63:37" - }, - { - "nodeType": "YulAssignment", - "src": "7590:116:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7605:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7618:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7626:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7614:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7614:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7631:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "7610:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7610:88:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7601:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7601:98:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7701:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7597:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "7597:109:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "7590:3:37" - } - ] - } - ] - }, - "name": "abi_encode_bytes", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7422:5:37", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "7429:3:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "7437:3:37", - "type": "" - } - ], - "src": "7396:316:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7992:1997:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "8002:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8012:2:37", - "type": "", - "value": "96" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "8006:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8023:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8041:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8052:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8037:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8037:18:37" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "8027:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8071:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8082:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8064:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8064:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8064:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8094:17:37", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "8105:6:37" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "8098:3:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8120:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8140:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8134:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "8134:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "8124:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "8163:6:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8171:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8156:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8156:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8156:22:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8187:13:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8197:3:37", - "type": "", - "value": "128" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "8191:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "8209:25:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8220:9:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "8231:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8216:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8216:18:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8209:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8243:53:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8265:9:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8280:1:37", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8283:6:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "8276:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8276:14:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8261:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8261:30:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "8293:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8257:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8257:39:37" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "8247:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8305:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8315:4:37", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "8309:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8328:29:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8346:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "8354:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8342:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8342:15:37" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "8332:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8366:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8375:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "8370:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8434:1384:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8455:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8468:6:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "8476:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "8464:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8464:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8488:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8460:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8460:95:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8448:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8448:108:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8448:108:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8569:23:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "8585:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8579:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "8579:13:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "8573:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8605:29:37", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8623:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "8631:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8619:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8619:15:37" - }, - "variables": [ - { - "name": "tail_3", - "nodeType": "YulTypedName", - "src": "8609:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "8654:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "8672:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8666:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "8666:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8677:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "8662:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8662:58:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8647:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8647:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8647:74:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8734:38:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "8764:2:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "8768:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8760:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8760:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "8754:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "8754:18:37" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "8738:12:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8828:184:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8853:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8856:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8846:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8846:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8846:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8958:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8961:4:37", - "type": "", - "value": "0x21" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8951:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8951:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8951:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8990:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8993:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "8983:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8983:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "8983:15:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "8798:12:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8812:1:37", - "type": "", - "value": "3" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "8795:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "8795:19:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "8788:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "8788:27:37" - }, - "nodeType": "YulIf", - "src": "8785:227:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9036:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9044:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9032:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9032:15:37" - }, - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "9049:12:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9025:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9025:37:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9025:37:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9075:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9085:4:37", - "type": "", - "value": "0x40" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "9079:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9102:40:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "9134:2:37" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "9138:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9130:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9130:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9124:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "9124:18:37" - }, - "variables": [ - { - "name": "memberValue0_1", - "nodeType": "YulTypedName", - "src": "9106:14:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9166:6:37" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "9174:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9162:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9162:15:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "9179:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9155:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9155:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9155:27:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9195:19:37", - "value": { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "9208:6:37" - }, - "variables": [ - { - "name": "pos_1", - "nodeType": "YulTypedName", - "src": "9199:5:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9227:37:37", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "9249:14:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9243:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "9243:21:37" - }, - "variables": [ - { - "name": "length_1", - "nodeType": "YulTypedName", - "src": "9231:8:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_3", - "nodeType": "YulIdentifier", - "src": "9284:6:37" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "9292:8:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9277:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9277:24:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9277:24:37" - }, - { - "nodeType": "YulAssignment", - "src": "9314:24:37", - "value": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9327:6:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "9335:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9323:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9323:15:37" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9314:5:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9351:39:37", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nodeType": "YulIdentifier", - "src": "9371:14:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9387:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9367:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9367:23:37" - }, - "variables": [ - { - "name": "srcPtr_1", - "nodeType": "YulTypedName", - "src": "9355:8:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "9403:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9414:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i_1", - "nodeType": "YulTypedName", - "src": "9407:3:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9489:221:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9514:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9531:8:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9525:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "9525:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9542:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "9521:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9521:88:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9507:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9507:103:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9507:103:37" - }, - { - "nodeType": "YulAssignment", - "src": "9627:23:37", - "value": { - "arguments": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9640:5:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9647:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9636:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9636:14:37" - }, - "variableNames": [ - { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9627:5:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9667:29:37", - "value": { - "arguments": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9683:8:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9693:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9679:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9679:17:37" - }, - "variableNames": [ - { - "name": "srcPtr_1", - "nodeType": "YulIdentifier", - "src": "9667:8:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9439:3:37" - }, - { - "name": "length_1", - "nodeType": "YulIdentifier", - "src": "9444:8:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "9436:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "9436:17:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "9454:22:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "9456:18:37", - "value": { - "arguments": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9467:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9472:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9463:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9463:11:37" - }, - "variableNames": [ - { - "name": "i_1", - "nodeType": "YulIdentifier", - "src": "9456:3:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "9432:3:37", - "statements": [] - }, - "src": "9428:282:37" - }, - { - "nodeType": "YulAssignment", - "src": "9723:15:37", - "value": { - "name": "pos_1", - "nodeType": "YulIdentifier", - "src": "9733:5:37" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9723:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9751:25:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "9765:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9773:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9761:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9761:15:37" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "9751:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9789:19:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9800:3:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9805:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9796:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9796:12:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9789:3:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8396:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8399:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "8393:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "8393:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "8407:18:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8409:14:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8418:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8421:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8414:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "8414:9:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8409:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "8389:3:37", - "statements": [] - }, - "src": "8385:1433:37" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "9846:6:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9858:9:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "9869:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9854:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9854:18:37" - } - ], - "functionName": { - "name": "abi_encode_address", - "nodeType": "YulIdentifier", - "src": "9827:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "9827:46:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9827:46:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9893:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9904:4:37", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9889:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9889:20:37" - }, - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9915:6:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9923:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9911:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "9911:22:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9882:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "9882:52:37" - }, - "nodeType": "YulExpressionStatement", - "src": "9882:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "9943:40:37", - "value": { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "9968:6:37" - }, - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "9976:6:37" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "9951:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "9951:32:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9943:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "7945:9:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "7956:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "7964:6:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "7972:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "7983:4:37", - "type": "" - } - ], - "src": "7717:2272:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10168:233:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10185:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10196:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10178:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10178:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10178:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10219:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10230:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10215:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10215:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10235:2:37", - "type": "", - "value": "43" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10208:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10208:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10208:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10258:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10269:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10254:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10254:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10274:34:37", - "type": "", - "value": "LibDiamondCut: No selectors in f" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10247:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10247:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10247:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10329:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10340:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10325:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10325:18:37" - }, - { - "hexValue": "6163657420746f20637574", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10345:13:37", - "type": "", - "value": "acet to cut" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10318:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10318:41:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10318:41:37" - }, - { - "nodeType": "YulAssignment", - "src": "10368:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10380:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10391:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10376:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10376:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10368:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10145:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10159:4:37", - "type": "" - } - ], - "src": "9994:407:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10580:234:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10597:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10608:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10590:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10590:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10590:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10631:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10642:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10627:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10627:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10647:2:37", - "type": "", - "value": "44" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10620:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10620:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10620:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10670:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10681:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10666:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10666:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a204164642066616365742063616e27742062", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10686:34:37", - "type": "", - "value": "LibDiamondCut: Add facet can't b" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10659:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10659:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10659:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10741:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10752:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10737:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10737:18:37" - }, - { - "hexValue": "652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "10757:14:37", - "type": "", - "value": "e address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10730:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "10730:42:37" - }, - "nodeType": "YulExpressionStatement", - "src": "10730:42:37" - }, - { - "nodeType": "YulAssignment", - "src": "10781:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10793:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10804:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10789:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "10789:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "10781:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10557:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10571:4:37", - "type": "" - } - ], - "src": "10406:408:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10993:243:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11010:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11021:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11003:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11003:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11003:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11044:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11055:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11040:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11040:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11060:2:37", - "type": "", - "value": "53" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11033:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11033:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11033:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11083:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11094:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11079:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11079:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11099:34:37", - "type": "", - "value": "LibDiamondCut: Can't add functio" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11072:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11072:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11072:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11154:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11165:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11150:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11150:18:37" - }, - { - "hexValue": "6e207468617420616c726561647920657869737473", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11170:23:37", - "type": "", - "value": "n that already exists" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11143:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11143:51:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11143:51:37" - }, - { - "nodeType": "YulAssignment", - "src": "11203:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11215:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11226:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11211:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11211:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11203:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "10970:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "10984:4:37", - "type": "" - } - ], - "src": "10819:417:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11287:171:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "11297:36:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11307:26:37", - "type": "", - "value": "0xffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "11301:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "11342:29:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11361:5:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "11368:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "11357:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11357:14:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "11346:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11399:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "11401:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "11401:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11401:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "11386:7:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "11395:2:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "11383:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "11383:15:37" - }, - "nodeType": "YulIf", - "src": "11380:41:37" - }, - { - "nodeType": "YulAssignment", - "src": "11430:22:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "11441:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11450:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11437:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11437:15:37" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "11430:3:37" - } - ] - } - ] - }, - "name": "increment_t_uint96", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "11269:5:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "11279:3:37", - "type": "" - } - ], - "src": "11241:217:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11637:246:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11654:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11665:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11647:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11647:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11647:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11688:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11699:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11684:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11684:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11704:2:37", - "type": "", - "value": "56" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11677:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11677:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11677:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11727:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11738:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11723:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11723:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11743:34:37", - "type": "", - "value": "LibDiamondCut: Can't replace fun" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11716:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11716:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11716:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11798:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11809:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11794:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11794:18:37" - }, - { - "hexValue": "6374696f6e20776974682073616d652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "11814:26:37", - "type": "", - "value": "ction with same function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11787:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "11787:54:37" - }, - "nodeType": "YulExpressionStatement", - "src": "11787:54:37" - }, - { - "nodeType": "YulAssignment", - "src": "11850:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "11862:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11873:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11858:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "11858:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "11850:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "11614:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "11628:4:37", - "type": "" - } - ], - "src": "11463:420:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12062:244:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12079:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12090:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12072:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12072:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12072:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12113:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12124:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12109:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12109:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12129:2:37", - "type": "", - "value": "54" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12102:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12102:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12102:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12152:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12163:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12148:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12148:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12168:34:37", - "type": "", - "value": "LibDiamondCut: Remove facet addr" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12141:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12141:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12141:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12223:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12234:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12219:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12219:18:37" - }, - { - "hexValue": "657373206d7573742062652061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12239:24:37", - "type": "", - "value": "ess must be address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12212:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12212:52:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12212:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "12273:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12285:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12296:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12281:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12281:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12273:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12039:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12053:4:37", - "type": "" - } - ], - "src": "11888:418:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12485:250:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12502:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12513:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12495:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12495:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12495:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12536:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12547:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12532:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12532:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12552:2:37", - "type": "", - "value": "60" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12525:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12525:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12525:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12575:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12586:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12571:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12571:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e6974206973206164647265737328", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12591:34:37", - "type": "", - "value": "LibDiamondCut: _init is address(" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12564:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12564:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12564:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12646:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12657:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12642:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12642:18:37" - }, - { - "hexValue": "3029206275745f63616c6c64617461206973206e6f7420656d707479", - "kind": "string", - "nodeType": "YulLiteral", - "src": "12662:30:37", - "type": "", - "value": "0) but_calldata is not empty" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12635:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12635:58:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12635:58:37" - }, - { - "nodeType": "YulAssignment", - "src": "12702:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12714:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12725:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12710:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12710:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "12702:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12462:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12476:4:37", - "type": "" - } - ], - "src": "12311:424:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12914:251:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12931:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12942:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12924:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12924:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12924:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12965:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12976:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12961:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "12961:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12981:2:37", - "type": "", - "value": "61" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12954:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12954:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12954:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13004:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13015:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13000:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13000:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d7074", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13020:34:37", - "type": "", - "value": "LibDiamondCut: _calldata is empt" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12993:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "12993:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "12993:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13075:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13086:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13071:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13071:18:37" - }, - { - "hexValue": "7920627574205f696e6974206973206e6f742061646472657373283029", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13091:31:37", - "type": "", - "value": "y but _init is not address(0)" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13064:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13064:59:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13064:59:37" - }, - { - "nodeType": "YulAssignment", - "src": "13132:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13144:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13155:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13140:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13140:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13132:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "12891:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "12905:4:37", - "type": "" - } - ], - "src": "12740:425:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13307:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "13317:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13337:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "13331:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "13331:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "13321:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13379:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13387:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13375:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13375:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "13394:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "13399:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "13353:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "13353:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13353:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "13415:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "13426:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "13431:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13422:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13422:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "13415:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "13283:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13288:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "13299:3:37", - "type": "" - } - ], - "src": "13170:274:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13570:98:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13587:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13598:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13580:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13580:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13580:21:37" - }, - { - "nodeType": "YulAssignment", - "src": "13610:52:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "13635:6:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13647:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13658:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13643:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13643:18:37" - } - ], - "functionName": { - "name": "abi_encode_bytes", - "nodeType": "YulIdentifier", - "src": "13618:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "13618:44:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "13610:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13539:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "13550:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13561:4:37", - "type": "" - } - ], - "src": "13449:219:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13847:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13864:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13875:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13857:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13857:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13857:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13898:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13909:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13894:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13894:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13914:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13887:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13887:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13887:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "13937:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13948:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13933:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "13933:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265", - "kind": "string", - "nodeType": "YulLiteral", - "src": "13953:34:37", - "type": "", - "value": "LibDiamondCut: _init function re" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13926:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13926:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13926:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14008:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14019:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14004:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14004:18:37" - }, - { - "hexValue": "766572746564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14024:8:37", - "type": "", - "value": "verted" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13997:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "13997:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "13997:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "14042:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14054:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14065:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14050:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14050:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14042:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "13824:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "13838:4:37", - "type": "" - } - ], - "src": "13673:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14254:245:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14271:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14282:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14264:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14264:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14264:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14305:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14316:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14301:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14301:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14321:2:37", - "type": "", - "value": "55" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14294:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14294:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14294:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14344:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14355:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14340:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14340:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e63", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14360:34:37", - "type": "", - "value": "LibDiamondCut: Can't remove func" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14333:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14333:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14333:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14415:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14426:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14411:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14411:18:37" - }, - { - "hexValue": "74696f6e207468617420646f65736e2774206578697374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14431:25:37", - "type": "", - "value": "tion that doesn't exist" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14404:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14404:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14404:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "14466:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14478:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14489:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14474:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14474:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14466:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14231:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "14245:4:37", - "type": "" - } - ], - "src": "14080:419:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14678:236:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14695:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14706:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14688:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14688:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14688:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14729:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14740:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14725:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14725:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14745:2:37", - "type": "", - "value": "46" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14718:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14718:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14718:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14768:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14779:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14764:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14764:18:37" - }, - { - "hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d75", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14784:34:37", - "type": "", - "value": "LibDiamondCut: Can't remove immu" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14757:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14757:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14757:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14839:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14850:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14835:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14835:18:37" - }, - { - "hexValue": "7461626c652066756e6374696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "14855:16:37", - "type": "", - "value": "table function" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "14828:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "14828:44:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14828:44:37" - }, - { - "nodeType": "YulAssignment", - "src": "14881:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14893:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14904:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14889:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "14889:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14881:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "14655:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "14669:4:37", - "type": "" - } - ], - "src": "14504:410:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "14968:76:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "14990:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "14992:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "14992:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "14992:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "14984:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "14987:1:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "14981:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "14981:8:37" - }, - "nodeType": "YulIf", - "src": "14978:34:37" - }, - { - "nodeType": "YulAssignment", - "src": "15021:17:37", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "15033:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "15036:1:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "15029:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "15029:9:37" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "15021:4:37" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "14950:1:37", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "14953:1:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "14959:4:37", - "type": "" - } - ], - "src": "14919:125:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15081:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15098:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15101:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15091:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "15091:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "15091:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15195:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15198:4:37", - "type": "", - "value": "0x31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15188:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "15188:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "15188:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15219:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15222:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "15212:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "15212:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "15212:15:37" - } - ] - }, - "name": "panic_error_0x31", - "nodeType": "YulFunctionDefinition", - "src": "15049:184:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address(offset) -> value\n {\n let value_1 := calldataload(offset)\n if iszero(eq(value_1, and(value_1, 0xffffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value := and(value_1, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptrt_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, shl(5, length)), 0x20), dataEnd) { revert(0, 0) }\n value0 := add(_2, 0x20)\n value1 := length\n value2 := abi_decode_address(add(headStart, 0x20))\n let offset_1 := calldataload(add(headStart, 64))\n if gt(offset_1, _1) { revert(0, 0) }\n let value3_1, value4_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n value3 := value3_1\n value4 := value4_1\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory_2944() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 0x60)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_array_struct_FacetCut_dyn(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n size := add(shl(5, length), 0x20)\n }\n function convert_array_t_array$_t_struct$_FacetCut_$659_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr(value, length) -> converted\n {\n let dst := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(length))\n let dst_1 := dst\n mstore(dst, length)\n let _1 := 0x20\n dst := add(dst, _1)\n let _2 := 5\n let srcEnd := add(value, shl(_2, length))\n if gt(srcEnd, calldatasize()) { revert(0, 0) }\n let src := value\n for { } lt(src, srcEnd) { src := add(src, _1) }\n {\n let innerOffset := calldataload(src)\n let _3 := 0xffffffffffffffff\n if gt(innerOffset, _3)\n {\n let _4 := 0\n revert(_4, _4)\n }\n let _5 := add(value, innerOffset)\n if slt(sub(calldatasize(), _5), 0x60)\n {\n let _6 := 0\n revert(_6, _6)\n }\n let value_1 := allocate_memory_2944()\n mstore(value_1, abi_decode_address(_5))\n let value_2 := calldataload(add(_5, _1))\n if iszero(lt(value_2, 3))\n {\n let _7 := 0\n revert(_7, _7)\n }\n mstore(add(value_1, _1), value_2)\n let _8 := 64\n let offset := calldataload(add(_5, _8))\n if gt(offset, _3)\n {\n let _9 := 0\n revert(_9, _9)\n }\n let _10 := add(_5, offset)\n if iszero(slt(add(_10, 0x1f), calldatasize()))\n {\n let _11 := 0\n revert(_11, _11)\n }\n let _12 := calldataload(_10)\n let dst_2 := allocate_memory(array_allocation_size_array_struct_FacetCut_dyn(_12))\n let dst_3 := dst_2\n mstore(dst_2, _12)\n dst_2 := add(dst_2, _1)\n let srcEnd_1 := add(add(_10, shl(_2, _12)), _1)\n if gt(srcEnd_1, calldatasize())\n {\n let _13 := 0\n revert(_13, _13)\n }\n let src_1 := add(_10, _1)\n for { } lt(src_1, srcEnd_1) { src_1 := add(src_1, _1) }\n {\n let value_3 := calldataload(src_1)\n if iszero(eq(value_3, and(value_3, 0xffffffff00000000000000000000000000000000000000000000000000000000)))\n {\n let _14 := 0\n revert(_14, _14)\n }\n mstore(dst_2, value_3)\n dst_2 := add(dst_2, _1)\n }\n mstore(add(value_1, _8), dst_3)\n mstore(dst, value_1)\n dst := add(dst, _1)\n }\n converted := dst_1\n }\n function abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 34)\n mstore(add(headStart, 64), \"LibDiamond: Must be contract own\")\n mstore(add(headStart, 96), \"er\")\n tail := add(headStart, 128)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function panic_error_0x21()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 39)\n mstore(add(headStart, 64), \"LibDiamondCut: Incorrect FacetCu\")\n mstore(add(headStart, 96), \"tAction\")\n tail := add(headStart, 128)\n }\n function panic_error_0x11()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n function abi_encode_address(value, pos)\n {\n mstore(pos, and(value, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20)\n }\n function abi_encode_tuple_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__to_t_array$_t_struct$_FacetCut_$659_memory_ptr_$dyn_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n let _1 := 96\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 128\n pos := add(headStart, _2)\n let tail_2 := add(add(headStart, shl(5, length)), _2)\n let _3 := 0x20\n let srcPtr := add(value0, _3)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80))\n let _4 := mload(srcPtr)\n let tail_3 := add(tail_2, _1)\n mstore(tail_2, and(mload(_4), 0xffffffffffffffffffffffffffffffffffffffff))\n let memberValue0 := mload(add(_4, _3))\n if iszero(lt(memberValue0, 3))\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n mstore(add(tail_2, _3), memberValue0)\n let _5 := 0x40\n let memberValue0_1 := mload(add(_4, _5))\n mstore(add(tail_2, _5), _1)\n let pos_1 := tail_3\n let length_1 := mload(memberValue0_1)\n mstore(tail_3, length_1)\n pos_1 := add(tail_2, _2)\n let srcPtr_1 := add(memberValue0_1, _3)\n let i_1 := 0\n for { } lt(i_1, length_1) { i_1 := add(i_1, 1) }\n {\n mstore(pos_1, and(mload(srcPtr_1), 0xffffffff00000000000000000000000000000000000000000000000000000000))\n pos_1 := add(pos_1, _3)\n srcPtr_1 := add(srcPtr_1, _3)\n }\n tail_2 := pos_1\n srcPtr := add(srcPtr, _3)\n pos := add(pos, _3)\n }\n abi_encode_address(value1, add(headStart, _3))\n mstore(add(headStart, 0x40), sub(tail_2, headStart))\n tail := abi_encode_bytes(value2, tail_2)\n }\n function abi_encode_tuple_t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 43)\n mstore(add(headStart, 64), \"LibDiamondCut: No selectors in f\")\n mstore(add(headStart, 96), \"acet to cut\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"LibDiamondCut: Add facet can't b\")\n mstore(add(headStart, 96), \"e address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 53)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't add functio\")\n mstore(add(headStart, 96), \"n that already exists\")\n tail := add(headStart, 128)\n }\n function increment_t_uint96(value) -> ret\n {\n let _1 := 0xffffffffffffffffffffffff\n let value_1 := and(value, _1)\n if eq(value_1, _1) { panic_error_0x11() }\n ret := add(value_1, 1)\n }\n function abi_encode_tuple_t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 56)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't replace fun\")\n mstore(add(headStart, 96), \"ction with same function\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 54)\n mstore(add(headStart, 64), \"LibDiamondCut: Remove facet addr\")\n mstore(add(headStart, 96), \"ess must be address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 60)\n mstore(add(headStart, 64), \"LibDiamondCut: _init is address(\")\n mstore(add(headStart, 96), \"0) but_calldata is not empty\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 61)\n mstore(add(headStart, 64), \"LibDiamondCut: _calldata is empt\")\n mstore(add(headStart, 96), \"y but _init is not address(0)\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"LibDiamondCut: _init function re\")\n mstore(add(headStart, 96), \"verted\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 55)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove func\")\n mstore(add(headStart, 96), \"tion that doesn't exist\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 46)\n mstore(add(headStart, 64), \"LibDiamondCut: Can't remove immu\")\n mstore(add(headStart, 96), \"table function\")\n tail := add(headStart, 128)\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y) { panic_error_0x11() }\n diff := sub(x, y)\n }\n function panic_error_0x31()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x31)\n revert(0, 0x24)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x45 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1F931C1C EQ PUSH2 0x4A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5D PUSH2 0x58 CALLDATASIZE PUSH1 0x4 PUSH2 0x16A3 JUMP JUMPDEST PUSH2 0x5F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x67 PUSH2 0xB8 JUMP JUMPDEST PUSH2 0xB1 PUSH2 0x74 DUP6 DUP8 PUSH2 0x1820 JUMP JUMPDEST DUP5 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x188 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x186 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A204D75737420626520636F6E7472616374206F776E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6572000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x381 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A8 JUMPI PUSH2 0x1A8 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1C9 JUMPI PUSH2 0x1C9 PUSH2 0x19AB JUMP JUMPDEST DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1DB JUMPI PUSH2 0x1DB PUSH2 0x19AB JUMP JUMPDEST EQ ISZERO PUSH2 0x22A JUMPI PUSH2 0x225 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1F6 JUMPI PUSH2 0x1F6 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x214 JUMPI PUSH2 0x214 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x3CC JUMP JUMPDEST PUSH2 0x36E JUMP JUMPDEST PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x23E JUMPI PUSH2 0x23E PUSH2 0x19AB JUMP JUMPDEST EQ ISZERO PUSH2 0x288 JUMPI PUSH2 0x225 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x259 JUMPI PUSH2 0x259 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x277 JUMPI PUSH2 0x277 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x778 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x29C JUMPI PUSH2 0x29C PUSH2 0x19AB JUMP JUMPDEST EQ ISZERO PUSH2 0x2E6 JUMPI PUSH2 0x225 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2B7 JUMPI PUSH2 0x2B7 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD DUP7 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2D5 JUMPI PUSH2 0x2D5 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0xB35 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A20496E636F72726563742046616365744375 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74416374696F6E00000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST POP DUP1 PUSH2 0x379 DUP2 PUSH2 0x1A09 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x18B JUMP JUMPDEST POP PUSH32 0x8FAA70878671CCD212D20771B795C50AF8FD3FF6CF27F4BDE57E5D4DE0AEB673 DUP4 DUP4 DUP4 PUSH1 0x40 MLOAD PUSH2 0x3B5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1AB8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x3C7 DUP3 DUP3 PUSH2 0xD28 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x45D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x521 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x566 JUMPI PUSH2 0x566 DUP3 DUP6 PUSH2 0xFDB JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xB1 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x586 JUMPI PUSH2 0x586 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 ISZERO PUSH2 0x66B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x35 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774206164642066756E6374696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E207468617420616C7265616479206578697374730000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0x760 DUP2 PUSH2 0x1C20 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0x770 SWAP1 PUSH2 0x1A09 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x569 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0x809 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x8CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204164642066616365742063616E27742062 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6520616464726573732830290000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP3 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x912 JUMPI PUSH2 0x912 DUP3 DUP6 PUSH2 0xFDB JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0xB1 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x932 JUMPI PUSH2 0x932 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP1 DUP8 AND DUP2 EQ ISZERO PUSH2 0xA1D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x38 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E2774207265706C6163652066756E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6374696F6E20776974682073616D652066756E6374696F6E0000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH2 0xA28 DUP6 DUP3 DUP5 PUSH2 0x106A JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP8 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP13 AND MUL OR DUP3 SSTORE DUP13 AND DUP1 DUP6 MSTORE PUSH1 0x1 DUP1 DUP13 ADD DUP6 MSTORE SWAP3 DUP6 KECCAK256 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE DUP6 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x8 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP6 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP5 DUP6 MUL NOT AND PUSH1 0xE0 DUP11 SWAP1 SHR SWAP5 SWAP1 SWAP5 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SWAP3 SSTORE SWAP4 SWAP1 SWAP3 MSTORE DUP8 SWAP1 MSTORE DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND OR SWAP1 SSTORE DUP4 PUSH2 0xB1D DUP2 PUSH2 0x1C20 JUMP JUMPDEST SWAP5 POP POP POP POP DUP1 DUP1 PUSH2 0xB2D SWAP1 PUSH2 0x1A09 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x915 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xBC6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A204E6F2073656C6563746F727320696E2066 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6163657420746F20637574000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO PUSH2 0xC8B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2052656D6F76652066616365742061646472 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x657373206D757374206265206164647265737328302900000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xD22 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xCAB JUMPI PUSH2 0xCAB PUSH2 0x197C JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP2 DUP6 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xD0D DUP5 DUP3 DUP5 PUSH2 0x106A JUMP JUMPDEST POP POP DUP1 DUP1 PUSH2 0xD1A SWAP1 PUSH2 0x1A09 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xC8E JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0xDD6 JUMPI DUP1 MLOAD ISZERO PUSH2 0xDD2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E6974206973206164647265737328 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x3029206275745F63616C6C64617461206973206E6F7420656D70747900000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD GT PUSH2 0xE67 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x3D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F63616C6C6461746120697320656D7074 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7920627574205F696E6974206973206E6F742061646472657373283029000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ PUSH2 0xEA6 JUMPI PUSH2 0xEA6 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CC9 PUSH1 0x28 SWAP2 CODECOPY PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xECE SWAP2 SWAP1 PUSH2 0x1C4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xF09 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xF0E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0xD22 JUMPI DUP1 MLOAD ISZERO PUSH2 0xF53 JUMPI DUP1 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17D SWAP2 SWAP1 PUSH2 0x1C68 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A205F696E69742066756E6374696F6E207265 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7665727465640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH2 0xFFD DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1CF1 PUSH1 0x24 SWAP2 CODECOPY PUSH2 0x15DC JUMP JUMPDEST PUSH1 0x2 DUP3 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 SWAP5 DUP6 ADD PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 DUP7 ADD DUP6 SWAP1 SSTORE SWAP5 DUP5 ADD DUP4 SSTORE SWAP2 DUP3 MSTORE SWAP3 SWAP1 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH2 0x110D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x37 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F76652066756E63 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x74696F6E207468617420646F65736E2774206578697374000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND ADDRESS EQ ISZERO PUSH2 0x11B3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E644375743A2043616E27742072656D6F766520696D6D75 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7461626C652066756E6374696F6E000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x17D JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP5 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 ADD SWAP1 SWAP4 MSTORE SWAP1 DUP4 KECCAK256 SLOAD PUSH21 0x10000000000000000000000000000000000000000 SWAP1 SWAP2 DIV PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 PUSH2 0x123D SWAP2 PUSH2 0x1C82 JUMP JUMPDEST SWAP1 POP DUP1 DUP3 EQ PUSH2 0x1384 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD DUP4 SWAP1 DUP2 LT PUSH2 0x127F JUMPI PUSH2 0x127F PUSH2 0x197C JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP5 MSTORE PUSH1 0x1 DUP11 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 DUP1 SLOAD PUSH1 0x7 SWAP1 SWAP3 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP1 SWAP3 DIV PUSH1 0xE0 SHL SWAP3 POP DUP3 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x12DD JUMPI PUSH2 0x12DD PUSH2 0x197C JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x8 DUP4 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x7 SWAP1 SWAP5 AND PUSH1 0x4 MUL PUSH2 0x100 EXP SWAP4 DUP5 MUL NOT AND PUSH1 0xE0 SWAP6 SWAP1 SWAP6 SHR SWAP3 SWAP1 SWAP3 MUL SWAP4 SWAP1 SWAP4 OR SWAP1 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND MUL OR SWAP1 SSTORE JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP1 PUSH2 0x13BA JUMPI PUSH2 0x13BA PUSH2 0x1C99 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 ADD SWAP4 DUP5 DIV ADD DUP1 SLOAD PUSH4 0xFFFFFFFF PUSH1 0x4 PUSH1 0x7 DUP8 AND MUL PUSH2 0x100 EXP MUL NOT AND SWAP1 SSTORE SWAP2 SWAP1 SWAP3 SSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP6 AND DUP3 MSTORE DUP7 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 SSTORE DUP1 PUSH2 0xB1 JUMPI PUSH1 0x2 DUP6 ADD SLOAD PUSH1 0x0 SWAP1 PUSH2 0x144F SWAP1 PUSH1 0x1 SWAP1 PUSH2 0x1C82 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP1 DUP10 ADD PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 SWAP2 POP DUP1 DUP3 EQ PUSH2 0x153D JUMPI PUSH1 0x0 DUP8 PUSH1 0x2 ADD DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x149B JUMPI PUSH2 0x149B PUSH2 0x197C JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP10 ADD DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP3 POP DUP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x14D9 JUMPI PUSH2 0x14D9 PUSH2 0x197C JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP2 SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 AND OR SWAP1 SSTORE SWAP3 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP3 MSTORE PUSH1 0x40 SWAP1 KECCAK256 ADD DUP2 SWAP1 SSTORE JUMPDEST DUP7 PUSH1 0x2 ADD DUP1 SLOAD DUP1 PUSH2 0x1550 JUMPI PUSH2 0x1550 PUSH2 0x1C99 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 KECCAK256 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE SWAP1 SWAP3 ADD SWAP1 SWAP3 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 AND DUP3 MSTORE PUSH1 0x1 DUP10 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 KECCAK256 ADD SSTORE POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 EXTCODESIZE DUP2 DUP2 PUSH2 0xD22 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17D SWAP2 SWAP1 PUSH2 0x1C68 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x163E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x166C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x169C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x16BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP6 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x16D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x16E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x16F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP10 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x170B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP8 POP DUP1 SWAP7 POP POP PUSH2 0x1721 PUSH1 0x20 DUP10 ADD PUSH2 0x1617 JUMP JUMPDEST SWAP5 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x1737 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1744 DUP9 DUP3 DUP10 ADD PUSH2 0x165A JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 POP SWAP3 SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x17A7 JUMPI PUSH2 0x17A7 PUSH2 0x1755 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x17F4 JUMPI PUSH2 0x17F4 PUSH2 0x1755 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1816 JUMPI PUSH2 0x1816 PUSH2 0x1755 JUMP JUMPDEST POP PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1833 PUSH2 0x182E DUP5 PUSH2 0x17FC JUMP JUMPDEST PUSH2 0x17AD JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD SWAP2 SWAP1 PUSH1 0x5 DUP7 DUP2 SHL DUP7 ADD CALLDATASIZE DUP2 GT ISZERO PUSH2 0x1851 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x196F JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x1874 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP11 ADD SWAP2 POP PUSH1 0x60 DUP3 CALLDATASIZE SUB SLT ISZERO PUSH2 0x188A JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1892 PUSH2 0x1784 JUMP JUMPDEST PUSH2 0x189B DUP4 PUSH2 0x1617 JUMP JUMPDEST DUP2 MSTORE DUP7 DUP4 ADD CALLDATALOAD PUSH1 0x3 DUP2 LT PUSH2 0x18AF JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP9 ADD MSTORE PUSH1 0x40 DUP4 DUP2 ADD CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x18C7 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP3 CALLDATASIZE PUSH1 0x1F DUP6 ADD SLT PUSH2 0x18DE JUMPI PUSH1 0x0 SWAP3 POP DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH2 0x18EE PUSH2 0x182E DUP5 PUSH2 0x17FC JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP3 DUP8 SHL DUP5 ADD DUP9 ADD SWAP3 DUP9 DUP2 ADD SWAP1 CALLDATASIZE DUP6 GT ISZERO PUSH2 0x190B JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP5 DUP10 ADD SWAP5 JUMPDEST DUP5 DUP7 LT ISZERO PUSH2 0x1958 JUMPI DUP6 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x1949 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 MSTORE SWAP5 DUP10 ADD SWAP5 SWAP1 DUP10 ADD SWAP1 PUSH2 0x1910 JUMP JUMPDEST SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP DUP9 MSTORE POP POP SWAP5 DUP4 ADD SWAP5 DUP4 ADD PUSH2 0x1853 JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1A3B JUMPI PUSH2 0x1A3B PUSH2 0x19DA JUMP JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1A5D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1A45 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD22 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x1A86 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x1A42 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP8 MLOAD DUP1 DUP4 MSTORE PUSH1 0x80 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD PUSH1 0x20 DUP1 DUP12 ADD PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1BE3 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80 DUP11 DUP6 SUB ADD DUP7 MSTORE DUP2 MLOAD DUP9 DUP6 ADD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD AND DUP7 MSTORE DUP5 DUP3 ADD MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x1B6A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST DUP7 DUP7 ADD MSTORE PUSH1 0x40 SWAP2 DUP3 ADD MLOAD SWAP2 DUP7 ADD DUP11 SWAP1 MSTORE DUP2 MLOAD SWAP1 DUP2 SWAP1 MSTORE SWAP1 DUP5 ADD SWAP1 PUSH1 0x0 SWAP1 DUP10 DUP8 ADD SWAP1 JUMPDEST DUP1 DUP4 LT ISZERO PUSH2 0x1BCE JUMPI DUP4 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP3 MSTORE SWAP3 DUP7 ADD SWAP3 PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP7 ADD SWAP1 PUSH2 0x1B8C JUMP JUMPDEST POP SWAP8 DUP6 ADD SWAP8 SWAP6 POP POP POP SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1AE1 JUMP JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP1 DUP9 ADD MSTORE DUP7 DUP2 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x1C12 DUP2 DUP10 PUSH2 0x1A6E JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 AND DUP2 DUP2 EQ ISZERO PUSH2 0x1C42 JUMPI PUSH2 0x1C42 PUSH2 0x19DA JUMP JUMPDEST PUSH1 0x1 ADD SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x1C5E DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1A42 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x1C7B PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1A6E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x1C94 JUMPI PUSH2 0x1C94 PUSH2 0x19DA JUMP JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID 0x4C PUSH10 0x624469616D6F6E644375 PUSH21 0x3A205F696E6974206164647265737320686173206E PUSH16 0x20636F64654C69624469616D6F6E6443 PUSH22 0x743A204E657720666163657420686173206E6F20636F PUSH5 0x65A2647472 PUSH16 0x6E582212207BB7A0CFF8739EF51A1B1E NATIVEFREEZE 0xE2 0xBB 0xF8 0xA5 DUP10 PUSH15 0xB4A1282F086CA6E37EE5E85F0F2164 PUSH20 0x6F6C634300080B00330000000000000000000000 ", - "sourceMap": "482:747:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;971:256;;;;;;:::i;:::-;;:::i;:::-;;;1123:35;:33;:35::i;:::-;1168:52;;1190:11;;1168:52;:::i;:::-;1203:5;1210:9;;1168:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1168:21:2;;-1:-1:-1;;;1168:52:2:i;:::-;971:256;;;;;:::o;2263:156:11:-;492:45;2343:30;;;;;2329:10;:44;2321:91;;;;;;;5625:2:37;2321:91:11;;;5607:21:37;5664:2;5644:18;;;5637:30;5703:34;5683:18;;;5676:62;5774:4;5754:18;;;5747:32;5796:19;;2321:91:11;;;;;;;;;2263:156::o;2563:1067::-;2719:18;2714:806;2752:11;:18;2739:10;:31;2714:806;;;2800:33;2836:11;2848:10;2836:23;;;;;;;;:::i;:::-;;;;;;;:30;;;2800:66;;2894:30;2884:40;;;;;;;;:::i;:::-;:6;:40;;;;;;;;:::i;:::-;;2880:630;;;2944:93;2957:11;2969:10;2957:23;;;;;;;;:::i;:::-;;;;;;;:36;;;2995:11;3007:10;2995:23;;;;;;;;:::i;:::-;;;;;;;:41;;;2944:12;:93::i;:::-;2880:630;;;3072:34;3062:6;:44;;;;;;;;:::i;:::-;;3058:452;;;3126:97;3143:11;3155:10;3143:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3181:11;3193:10;3181:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3126:16;:97::i;3058:452::-;3258:33;3248:6;:43;;;;;;;;:::i;:::-;;3244:266;;;3311:96;3327:11;3339:10;3327:23;;;;;;;;:::i;:::-;;;;;;;:36;;;3365:11;3377:10;3365:23;;;;;;;;:::i;:::-;;;;;;;:41;;;3311:15;:96::i;3244:266::-;3446:49;;;;;6406:2:37;3446:49:11;;;6388:21:37;6445:2;6425:18;;;6418:30;6484:34;6464:18;;;6457:62;6555:9;6535:18;;;6528:37;6582:19;;3446:49:11;6204:403:37;3244:266:11;-1:-1:-1;2772:12:11;;;;:::i;:::-;;;;2714:806;;;;3534:41;3545:11;3558:5;3565:9;3534:41;;;;;;;;:::i;:::-;;;;;;;;3585:38;3606:5;3613:9;3585:20;:38::i;:::-;2563:1067;;;:::o;3636:1089::-;3772:1;3744:18;:25;:29;3736:85;;;;;;;10196:2:37;3736:85:11;;;10178:21:37;10235:2;10215:18;;;10208:30;10274:34;10254:18;;;10247:62;10345:13;10325:18;;;10318:41;10376:19;;3736:85:11;9994:407:37;3736:85:11;492:45;3901:27;;;3893:84;;;;;;;10608:2:37;3893:84:11;;;10590:21:37;10647:2;10627:18;;;10620:30;10686:34;10666:18;;;10659:62;10757:14;10737:18;;;10730:42;10789:19;;3893:84:11;10406:408:37;3893:84:11;4020:40;;;3987:23;4020:40;;;:25;;;:40;;;;;:65;4154:21;;;4150:91;;4191:27;4200:2;4204:13;4191:8;:27::i;:::-;4255:21;4250:469;4294:18;:25;4278:13;:41;4250:469;;;4352:15;4370:18;4389:13;4370:33;;;;;;;;:::i;:::-;;;;;;;;;;;;4443:39;;;4417:23;4443:39;;;;;;;;;;;:52;4370:33;;-1:-1:-1;4443:52:11;;4517:29;;4509:95;;;;;;;11021:2:37;4509:95:11;;;11003:21:37;11060:2;11040:18;;;11033:30;11099:34;11079:18;;;11072:62;11170:23;11150:18;;;11143:51;11211:19;;4509:95:11;10819:417:37;4509:95:11;7084:40;;;:29;:40;;;;;;;;;;;:85;;;;;;;;;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;7084:85;7263:69;;;;4690:18;;;;:::i;:::-;;;;4338:381;;4321:15;;;;;:::i;:::-;;;;4250:469;;4731:1138;4871:1;4843:18;:25;:29;4835:85;;;;;;;10196:2:37;4835:85:11;;;10178:21:37;10235:2;10215:18;;;10208:30;10274:34;10254:18;;;10247:62;10345:13;10325:18;;;10318:41;10376:19;;4835:85:11;9994:407:37;4835:85:11;492:45;4992:27;;;4984:84;;;;;;;10608:2:37;4984:84:11;;;10590:21:37;10647:2;10627:18;;;10620:30;10686:34;10666:18;;;10659:62;10757:14;10737:18;;;10730:42;10789:19;;4984:84:11;10406:408:37;4984:84:11;5111:40;;;5078:23;5111:40;;;:25;;;:40;;;;;:65;5245:21;;;5241:79;;5282:27;5291:2;5295:13;5282:8;:27::i;:::-;5334:21;5329:534;5373:18;:25;5357:13;:41;5329:534;;;5431:15;5449:18;5468:13;5449:33;;;;;;;;:::i;:::-;;;;;;;;;;;;5522:39;;;5496:23;5522:39;;;;;;;;;;;:52;5449:33;;-1:-1:-1;5522:52:11;;;;;5596:32;;;;;5588:101;;;;;;;11665:2:37;5588:101:11;;;11647:21:37;11704:2;11684:18;;;11677:30;11743:34;11723:18;;;11716:62;11814:26;11794:18;;;11787:54;11858:19;;5588:101:11;11463:420:37;5588:101:11;5703:45;5718:2;5722:15;5739:8;5703:14;:45::i;:::-;7084:40;;;:29;:40;;;;;;;;;;;:85;;;;;;;;;;;;;;7179:40;;;;;-1:-1:-1;7179:25:11;;;:40;;;;;:74;;;;;;;;;;;;;;;;;;;;;;;;;7084:85;7179:74;;;;;;;;;;;;;;;;;;;;;7263:40;;;;;;;:69;;7084:85;7263:69;;;;5834:18;;;;:::i;:::-;;;;5417:446;;5400:15;;;;;:::i;:::-;;;;5329:534;;5875:742;6014:1;5986:18;:25;:29;5978:85;;;;;;;10196:2:37;5978:85:11;;;10178:21:37;10235:2;10215:18;;;10208:30;10274:34;10254:18;;;10247:62;10345:13;10325:18;;;10318:41;10376:19;;5978:85:11;9994:407:37;5978:85:11;492:45;6200:27;;;;6192:94;;;;;;;12090:2:37;6192:94:11;;;12072:21:37;12129:2;12109:18;;;12102:30;12168:34;12148:18;;;12141:62;12239:24;12219:18;;;12212:52;12281:19;;6192:94:11;11888:418:37;6192:94:11;6301:21;6296:315;6340:18;:25;6324:13;:41;6296:315;;;6398:15;6416:18;6435:13;6416:33;;;;;;;;:::i;:::-;;;;;;;;;;;;6489:39;;;6463:23;6489:39;;;;;;;;;;;:52;6416:33;;-1:-1:-1;6489:52:11;;6555:45;6489:2;:52;6416:33;6555:14;:45::i;:::-;6384:227;;6367:15;;;;;:::i;:::-;;;;6296:315;;;;5968:649;5875:742;;:::o;9541:871::-;9633:19;;;9629:777;;9676:16;;:21;9668:94;;;;;;;12513:2:37;9668:94:11;;;12495:21:37;12552:2;12532:18;;;12525:30;12591:34;12571:18;;;12564:62;12662:30;12642:18;;;12635:58;12710:19;;9668:94:11;12311:424:37;9668:94:11;9541:871;;:::o;9629:777::-;9820:1;9801:9;:16;:20;9793:94;;;;;;;12942:2:37;9793:94:11;;;12924:21:37;12981:2;12961:18;;;12954:30;13020:34;13000:18;;;12993:62;13091:31;13071:18;;;13064:59;13140:19;;9793:94:11;12740:425:37;9793:94:11;9905:22;;;9922:4;9905:22;9901:134;;9947:73;9970:5;9947:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;10049:12;10063:18;10085:5;:18;;10104:9;10085:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10048:66;;;;10133:7;10128:268;;10164:12;;:16;10160:222;;10261:5;10247:21;;;;;;;;;;;:::i;10160:222::-;10315:48;;;;;13875:2:37;10315:48:11;;;13857:21:37;13914:2;13894:18;;;13887:30;13953:34;13933:18;;;13926:62;14024:8;14004:18;;;13997:36;14050:19;;10315:48:11;13673:402:37;6623:316:11;6710:77;6733:13;6710:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;6861:17;;;:24;;6797:40;;;;;;;;:25;;;;:40;;;;;;;:61;;:88;;;6895:37;;;;;;;;;;;;;;;;;;;;;6623:316::o;7345:2190::-;7472:27;;;7464:95;;;;;;;14282:2:37;7464:95:11;;;14264:21:37;14321:2;14301:18;;;14294:30;14360:34;14340:18;;;14333:62;14431:25;14411:18;;;14404:53;14474:19;;7464:95:11;14080:419:37;7464:95:11;7654:30;;;7679:4;7654:30;;7646:89;;;;;;;14706:2:37;7646:89:11;;;14688:21:37;14745:2;14725:18;;;14718:30;14784:34;14764:18;;;14757:62;14855:16;14835:18;;;14828:44;14889:19;;7646:89:11;14504:410:37;7646:89:11;7846:40;;;7819:24;7846:40;;;;;;;;;;;:65;7952:40;;;;;8020:1;7952:25;;;:40;;;;;;:65;7846;;;;;;;7819:24;7952:69;;;:::i;:::-;7921:100;;8123:20;8103:16;:40;8099:387;;8181:40;;;8159:19;8181:40;;;:25;;;:40;;;;;:80;;8240:20;;8181:80;;;;;;:::i;:::-;;;;;;;;;;;;;;8275:40;;;;;:25;;;:40;;;;;;;:76;;8181:80;;;;;;;;;;;;;;-1:-1:-1;8181:80:11;;8275:40;8334:16;;8275:76;;;;;;:::i;:::-;;;;;;;;;;;;;:91;;;:76;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;8380:43;;;;;;;;;;;;;:95;;;;;;;;;;;;8099:387;8531:40;;;;;;;:25;;;:40;;;;;:64;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8612:40;;;;;;;;;;;8605:47;8747:25;8743:786;;8914:17;;;:24;8879:32;;8914:28;;8941:1;;8914:28;:::i;:::-;8987:40;;;8956:28;8987:40;;;:25;;;;:40;;;;;;:61;;8879:63;;-1:-1:-1;9066:48:11;;;9062:338;;9134:24;9161:2;:17;;9179:24;9161:43;;;;;;;;:::i;:::-;;;;;;;;;;;9222:17;;;:39;;9161:43;;;;;-1:-1:-1;9161:43:11;;9240:20;;9222:39;;;;;;:::i;:::-;;;;;;;;;;;;;:58;;;;;;;;;;;9298:43;;;;;;-1:-1:-1;9298:25:11;;;:43;;;;;;:64;:87;;;9062:338;9413:2;:17;;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;9457:40;;;;9413:23;9457:25;;;:40;;;;;;:61;9450:68;-1:-1:-1;;7446:2089:11;;7345:2190;;;:::o;10418:261::-;10591:22;;10658:13;10640:16;10632:40;;;;;;;;;;;;;:::i;14:282:37:-;53:5;101:6;88:20;152:44;143:7;139:58;130:7;127:71;117:99;;212:1;209;202:12;117:99;247:42;234:56;;14:282;-1:-1:-1;;14:282:37:o;301:347::-;352:8;362:6;416:3;409:4;401:6;397:17;393:27;383:55;;434:1;431;424:12;383:55;-1:-1:-1;457:20:37;;500:18;489:30;;486:50;;;532:1;529;522:12;486:50;569:4;561:6;557:17;545:29;;621:3;614:4;605:6;597;593:19;589:30;586:39;583:59;;;638:1;635;628:12;583:59;301:347;;;;;:::o;653:1009::-;795:6;803;811;819;827;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;936:9;923:23;965:18;1006:2;998:6;995:14;992:34;;;1022:1;1019;1012:12;992:34;1060:6;1049:9;1045:22;1035:32;;1105:7;1098:4;1094:2;1090:13;1086:27;1076:55;;1127:1;1124;1117:12;1076:55;1167:2;1154:16;1193:2;1185:6;1182:14;1179:34;;;1209:1;1206;1199:12;1179:34;1264:7;1257:4;1247:6;1244:1;1240:14;1236:2;1232:23;1228:34;1225:47;1222:67;;;1285:1;1282;1275:12;1222:67;1316:4;1312:2;1308:13;1298:23;;1340:6;1330:16;;;1365:40;1399:4;1388:9;1384:20;1365:40;:::i;:::-;1355:50;;1458:2;1447:9;1443:18;1430:32;1414:48;;1487:2;1477:8;1474:16;1471:36;;;1503:1;1500;1493:12;1471:36;;1542:60;1594:7;1583:8;1572:9;1568:24;1542:60;:::i;:::-;653:1009;;;;-1:-1:-1;653:1009:37;;-1:-1:-1;1621:8:37;;1516:86;653:1009;-1:-1:-1;;;653:1009:37:o;1667:184::-;1719:77;1716:1;1709:88;1816:4;1813:1;1806:15;1840:4;1837:1;1830:15;1856:253;1928:2;1922:9;1970:4;1958:17;;2005:18;1990:34;;2026:22;;;1987:62;1984:88;;;2052:18;;:::i;:::-;2088:2;2081:22;1856:253;:::o;2114:334::-;2185:2;2179:9;2241:2;2231:13;;2246:66;2227:86;2215:99;;2344:18;2329:34;;2365:22;;;2326:62;2323:88;;;2391:18;;:::i;:::-;2427:2;2420:22;2114:334;;-1:-1:-1;2114:334:37:o;2453:191::-;2521:4;2554:18;2546:6;2543:30;2540:56;;;2576:18;;:::i;:::-;-1:-1:-1;2621:1:37;2617:14;2633:4;2613:25;;2453:191::o;2649:2769::-;2817:9;2852:72;2868:55;2916:6;2868:55;:::i;:::-;2852:72;:::i;:::-;2958:19;;;2996:4;3016:12;;;;2946:3;3047:1;3082:15;;;3071:27;;3121:14;3110:26;;3107:46;;;3149:1;3146;3139:12;3107:46;3173:5;3187:2198;3203:6;3198:3;3195:15;3187:2198;;;3289:3;3276:17;3316:18;3366:2;3353:11;3350:19;3347:109;;;3410:1;3439:2;3435;3428:14;3347:109;3490:11;3483:5;3479:23;3469:33;;3547:4;3542:2;3526:14;3522:23;3518:34;3515:124;;;3593:1;3622:2;3618;3611:14;3515:124;3667:22;;:::i;:::-;3718;3737:2;3718:22;:::i;:::-;3709:7;3702:39;3790:2;3786;3782:11;3769:25;3829:1;3820:7;3817:14;3807:112;;3873:1;3902:2;3898;3891:14;3807:112;3939:16;;;3932:33;3988:2;4030:11;;;4017:25;4058:14;;;4055:104;;;4113:1;4142:2;4138;4131:14;4055:104;4183:15;;;;;4241:14;4234:4;4225:14;;4221:35;4211:136;;4299:1;4288:12;;4329:3;4324;4317:16;4211:136;4384:3;4371:17;4360:28;;4414:69;4430:52;4478:3;4430:52;:::i;4414:69::-;4527:18;;;4623:12;;;4614:22;;4610:31;;;4567:14;;;;4670;4657:28;;4654:121;;;4727:1;4757:3;4752;4745:16;4654:121;4801:12;;;;4826:440;4844:8;4837:5;4834:19;4826:440;;;4940:5;4927:19;4998:66;4989:7;4985:80;4976:7;4973:93;4963:210;;5117:1;5151:3;5146;5139:16;4963:210;5190:22;;4865:14;;;;5238;;;;4826:440;;;5286:16;;;5279:31;;;;-1:-1:-1;5323:20:37;;-1:-1:-1;;5363:12:37;;;;3220;;3187:2198;;;-1:-1:-1;5407:5:37;;2649:2769;-1:-1:-1;;;;;;;2649:2769:37:o;5826:184::-;5878:77;5875:1;5868:88;5975:4;5972:1;5965:15;5999:4;5996:1;5989:15;6015:184;6067:77;6064:1;6057:88;6164:4;6161:1;6154:15;6188:4;6185:1;6178:15;6612:184;6664:77;6661:1;6654:88;6761:4;6758:1;6751:15;6785:4;6782:1;6775:15;6801:195;6840:3;6871:66;6864:5;6861:77;6858:103;;;6941:18;;:::i;:::-;-1:-1:-1;6988:1:37;6977:13;;6801:195::o;7133:258::-;7205:1;7215:113;7229:6;7226:1;7223:13;7215:113;;;7305:11;;;7299:18;7286:11;;;7279:39;7251:2;7244:10;7215:113;;;7346:6;7343:1;7340:13;7337:48;;;-1:-1:-1;;7381:1:37;7363:16;;7356:27;7133:258::o;7396:316::-;7437:3;7475:5;7469:12;7502:6;7497:3;7490:19;7518:63;7574:6;7567:4;7562:3;7558:14;7551:4;7544:5;7540:16;7518:63;:::i;:::-;7626:2;7614:15;7631:66;7610:88;7601:98;;;;7701:4;7597:109;;7396:316;-1:-1:-1;;7396:316:37:o;7717:2272::-;7983:4;8012:2;8052;8041:9;8037:18;8082:2;8071:9;8064:21;8105:6;8140;8134:13;8171:6;8163;8156:22;8197:3;8187:13;;8231:2;8220:9;8216:18;8209:25;;8293:2;8283:6;8280:1;8276:14;8265:9;8261:30;8257:39;8315:4;8354:2;8346:6;8342:15;8375:1;8385:1433;8399:6;8396:1;8393:13;8385:1433;;;8488:66;8476:9;8468:6;8464:22;8460:95;8455:3;8448:108;8585:6;8579:13;8631:2;8623:6;8619:15;8677:42;8672:2;8666:9;8662:58;8654:6;8647:74;8768:2;8764;8760:11;8754:18;8812:1;8798:12;8795:19;8785:227;;8856:77;8853:1;8846:88;8961:4;8958:1;8951:15;8993:4;8990:1;8983:15;8785:227;9032:15;;;9025:37;9085:4;9130:11;;;9124:18;9162:15;;;9155:27;;;9243:21;;9277:24;;;;9367:23;;;;-1:-1:-1;;9323:15:37;;;;9428:282;9444:8;9439:3;9436:17;9428:282;;;9525:15;;9542:66;9521:88;9507:103;;9679:17;;;;9472:1;9463:11;;;;;9636:14;;;;9428:282;;;-1:-1:-1;9796:12:37;;;;9733:5;-1:-1:-1;;;9761:15:37;;;;8421:1;8414:9;8385:1433;;;-1:-1:-1;;7078:42:37;7067:54;;9854:18;;;7055:67;9911:22;;;9904:4;9889:20;;9882:52;9951:32;9915:6;9968;9951:32;:::i;:::-;9943:40;7717:2272;-1:-1:-1;;;;;;;;;;7717:2272:37:o;11241:217::-;11279:3;11307:26;11368:2;11361:5;11357:14;11395:2;11386:7;11383:15;11380:41;;;11401:18;;:::i;:::-;11450:1;11437:15;;11241:217;-1:-1:-1;;;11241:217:37:o;13170:274::-;13299:3;13337:6;13331:13;13353:53;13399:6;13394:3;13387:4;13379:6;13375:17;13353:53;:::i;:::-;13422:16;;;;;13170:274;-1:-1:-1;;13170:274:37:o;13449:219::-;13598:2;13587:9;13580:21;13561:4;13618:44;13658:2;13647:9;13643:18;13635:6;13618:44;:::i;:::-;13610:52;13449:219;-1:-1:-1;;;13449:219:37:o;14919:125::-;14959:4;14987:1;14984;14981:8;14978:34;;;14992:18;;:::i;:::-;-1:-1:-1;15029:9:37;;14919:125::o;15049:184::-;15101:77;15098:1;15091:88;15198:4;15195:1;15188:15;15222:4;15219:1;15212:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "1499600", - "executionCost": "1616", - "totalCost": "1501216" - }, - "external": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": "infinite" - } - }, - "methodIdentifiers": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": "1f931c1c" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"diamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Add/replace/remove any number of functions and optionally execute a function with delegatecall\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/facets/DiamondCutFacet.sol\":\"DiamondCutFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/facets/DiamondCutFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\",\"keccak256\":\"0x58fc18b268fa5d1956c0e677f3fe91e2dd9d86fc73bb43527110d8afbbcd733e\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": { - "notice": "Add/replace/remove any number of functions and optionally execute a function with delegatecall" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/DiamondERC165Init.json b/extendedArtifactsTron/DiamondERC165Init.json deleted file mode 100644 index ea80738..0000000 --- a/extendedArtifactsTron/DiamondERC165Init.json +++ /dev/null @@ -1,1549 +0,0 @@ -{ - "contractName": "DiamondERC165Init", - "sourceName": "solc_0.8/diamond/initializers/DiamondERC165Init.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "interfaceIds", - "type": "bytes4[]" - }, - { - "internalType": "bytes4[]", - "name": "interfaceIdsToRemove", - "type": "bytes4[]" - } - ], - "name": "setERC165", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b506104388061003a6000396000f3fe608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100455760003560e01c80632a8480911461004a575b600080fd5b61005d6100583660046102be565b61005f565b005b7f01ffc9a70000000000000000000000000000000000000000000000000000000060009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f6020527f699d9daa71b280d05a152715774afa0a81a312594b2d731d6b0b2552b7d6f69f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c905b848110156101be5760018260030160008888858181106101385761013861032a565b905060200201602081019061014d9190610359565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055806101b6816103a2565b915050610116565b5060005b8281101561026a5760008260030160008686858181106101e4576101e461032a565b90506020020160208101906101f99190610359565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905580610262816103a2565b9150506101c2565b505050505050565b60008083601f84011261028457600080fd5b50813567ffffffffffffffff81111561029c57600080fd5b6020830191508360208260051b85010111156102b757600080fd5b9250929050565b600080600080604085870312156102d457600080fd5b843567ffffffffffffffff808211156102ec57600080fd5b6102f888838901610272565b9096509450602087013591508082111561031157600080fd5b5061031e87828801610272565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561036b57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461039b57600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156103fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26474726f6e5822122031fb0eb5d31a0385bd6a44bc21fbac26f5c5d2102b82fe0e4f36d730db65866d64736f6c634300080b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100455760003560e01c80632a8480911461004a575b600080fd5b61005d6100583660046102be565b61005f565b005b7f01ffc9a70000000000000000000000000000000000000000000000000000000060009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f6020527f699d9daa71b280d05a152715774afa0a81a312594b2d731d6b0b2552b7d6f69f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c905b848110156101be5760018260030160008888858181106101385761013861032a565b905060200201602081019061014d9190610359565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055806101b6816103a2565b915050610116565b5060005b8281101561026a5760008260030160008686858181106101e4576101e461032a565b90506020020160208101906101f99190610359565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905580610262816103a2565b9150506101c2565b505050505050565b60008083601f84011261028457600080fd5b50813567ffffffffffffffff81111561029c57600080fd5b6020830191508360208260051b85010111156102b757600080fd5b9250929050565b600080600080604085870312156102d457600080fd5b843567ffffffffffffffff808211156102ec57600080fd5b6102f888838901610272565b9096509450602087013591508082111561031157600080fd5b5061031e87828801610272565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561036b57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461039b57600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156103fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26474726f6e5822122031fb0eb5d31a0385bd6a44bc21fbac26f5c5d2102b82fe0e4f36d730db65866d64736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "setERC165(bytes4[],bytes4[])": { - "params": { - "interfaceIds": "list of interface id to set as supported", - "interfaceIdsToRemove": "list of interface id to unset as supported. Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array." - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x438 DUP1 PUSH2 0x3A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x45 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2A848091 EQ PUSH2 0x4A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5D PUSH2 0x58 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BE JUMP JUMPDEST PUSH2 0x5F JUMP JUMPDEST STOP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131F PUSH1 0x20 MSTORE PUSH32 0x699D9DAA71B280D05A152715774AFA0A81A312594B2D731D6B0B2552B7D6F69F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1BE JUMPI PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP9 DUP9 DUP6 DUP2 DUP2 LT PUSH2 0x138 JUMPI PUSH2 0x138 PUSH2 0x32A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x14D SWAP2 SWAP1 PUSH2 0x359 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 PUSH2 0x1B6 DUP2 PUSH2 0x3A2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x116 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x26A JUMPI PUSH1 0x0 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x1E4 JUMPI PUSH2 0x1E4 PUSH2 0x32A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1F9 SWAP2 SWAP1 PUSH2 0x359 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 PUSH2 0x262 DUP2 PUSH2 0x3A2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1C2 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x29C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x2B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F8 DUP9 DUP4 DUP10 ADD PUSH2 0x272 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E DUP8 DUP3 DUP9 ADD PUSH2 0x272 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x3FB JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 BALANCE 0xFB 0xE 0xB5 CALLTOKENID BYTE SUB DUP6 0xBD PUSH11 0x44BC21FBAC26F5C5D2102B DUP3 INVALID 0xE 0x4F CALLDATASIZE NATIVEFREEZEEXPIRETIME ADDRESS 0xDB PUSH6 0x866D64736F6C PUSH4 0x4300080B STOP CALLER ", - "sourceMap": "165:902:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@setERC165_643": { - "entryPoint": 95, - "id": 643, - "parameterSlots": 4, - "returnSlots": 0 - }, - "abi_decode_array_bytes4_dyn_calldata": { - "entryPoint": 626, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_array$_t_bytes4_$dyn_calldata_ptrt_array$_t_bytes4_$dyn_calldata_ptr": { - "entryPoint": 702, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_bytes4": { - "entryPoint": 857, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "increment_t_uint256": { - "entryPoint": 930, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x32": { - "entryPoint": 810, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:2036:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "97:283:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "146:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "155:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "158:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "148:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "148:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "148:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "125:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "133:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "121:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "121:17:37" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "140:3:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "117:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "117:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "110:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "110:35:37" - }, - "nodeType": "YulIf", - "src": "107:55:37" - }, - { - "nodeType": "YulAssignment", - "src": "171:30:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "194:6:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "181:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "181:20:37" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "171:6:37" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "244:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "253:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "256:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "246:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "246:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "246:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "216:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "224:18:37", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "213:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "213:30:37" - }, - "nodeType": "YulIf", - "src": "210:50:37" - }, - { - "nodeType": "YulAssignment", - "src": "269:29:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "285:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "293:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "281:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "281:17:37" - }, - "variableNames": [ - { - "name": "arrayPos", - "nodeType": "YulIdentifier", - "src": "269:8:37" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "358:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "367:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "370:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "360:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "360:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "360:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "321:6:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "333:1:37", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "336:6:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "329:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "329:14:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "317:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "317:27:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "346:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "313:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "313:38:37" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "353:3:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "310:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "310:47:37" - }, - "nodeType": "YulIf", - "src": "307:67:37" - } - ] - }, - "name": "abi_decode_array_bytes4_dyn_calldata", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "60:6:37", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "68:3:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "arrayPos", - "nodeType": "YulTypedName", - "src": "76:8:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "86:6:37", - "type": "" - } - ], - "src": "14:366:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "540:614:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "586:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "595:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "598:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "588:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "588:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "588:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "561:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "570:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "557:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "557:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "582:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "553:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "553:32:37" - }, - "nodeType": "YulIf", - "src": "550:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "611:37:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "638:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "625:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "625:23:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "615:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "657:28:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "667:18:37", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "661:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "712:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "721:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "724:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "714:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "714:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "714:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "700:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "708:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "697:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "697:14:37" - }, - "nodeType": "YulIf", - "src": "694:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "737:95:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "804:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "815:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "800:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "800:22:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "824:7:37" - } - ], - "functionName": { - "name": "abi_decode_array_bytes4_dyn_calldata", - "nodeType": "YulIdentifier", - "src": "763:36:37" - }, - "nodeType": "YulFunctionCall", - "src": "763:69:37" - }, - "variables": [ - { - "name": "value0_1", - "nodeType": "YulTypedName", - "src": "741:8:37", - "type": "" - }, - { - "name": "value1_1", - "nodeType": "YulTypedName", - "src": "751:8:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "841:18:37", - "value": { - "name": "value0_1", - "nodeType": "YulIdentifier", - "src": "851:8:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "841:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "868:18:37", - "value": { - "name": "value1_1", - "nodeType": "YulIdentifier", - "src": "878:8:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "868:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "895:48:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "928:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "939:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "924:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "924:18:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "911:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "911:32:37" - }, - "variables": [ - { - "name": "offset_1", - "nodeType": "YulTypedName", - "src": "899:8:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "972:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "981:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "984:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "974:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "974:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "974:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "958:8:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "968:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "955:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "955:16:37" - }, - "nodeType": "YulIf", - "src": "952:36:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "997:97:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1064:9:37" - }, - { - "name": "offset_1", - "nodeType": "YulIdentifier", - "src": "1075:8:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1060:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1060:24:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1086:7:37" - } - ], - "functionName": { - "name": "abi_decode_array_bytes4_dyn_calldata", - "nodeType": "YulIdentifier", - "src": "1023:36:37" - }, - "nodeType": "YulFunctionCall", - "src": "1023:71:37" - }, - "variables": [ - { - "name": "value2_1", - "nodeType": "YulTypedName", - "src": "1001:8:37", - "type": "" - }, - { - "name": "value3_1", - "nodeType": "YulTypedName", - "src": "1011:8:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1103:18:37", - "value": { - "name": "value2_1", - "nodeType": "YulIdentifier", - "src": "1113:8:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1103:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1130:18:37", - "value": { - "name": "value3_1", - "nodeType": "YulIdentifier", - "src": "1140:8:37" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "1130:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_bytes4_$dyn_calldata_ptrt_array$_t_bytes4_$dyn_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "482:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "493:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "505:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "513:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "521:6:37", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "529:6:37", - "type": "" - } - ], - "src": "385:769:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1191:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1208:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1211:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1201:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1201:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1201:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1305:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1308:4:37", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1298:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1298:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1298:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1329:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1332:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1322:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1322:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1322:15:37" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "1159:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1417:263:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1463:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1472:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1475:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1465:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1465:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1465:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1438:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1447:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1434:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1434:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1459:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1430:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1430:32:37" - }, - "nodeType": "YulIf", - "src": "1427:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1488:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1514:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1501:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "1501:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1492:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1634:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1643:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1646:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1636:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1636:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1636:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1546:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1557:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1564:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1553:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1553:78:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1543:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1543:89:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1536:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1536:97:37" - }, - "nodeType": "YulIf", - "src": "1533:117:37" - }, - { - "nodeType": "YulAssignment", - "src": "1659:15:37", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1669:5:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1659:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes4", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1383:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1394:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1406:6:37", - "type": "" - } - ], - "src": "1348:332:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1732:302:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1831:168:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1852:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1855:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1845:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1845:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1845:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1953:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1956:4:37", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1946:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1946:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1946:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1981:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1984:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1974:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1974:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1974:15:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1748:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1755:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1745:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1745:77:37" - }, - "nodeType": "YulIf", - "src": "1742:257:37" - }, - { - "nodeType": "YulAssignment", - "src": "2008:20:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2019:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2026:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2015:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2015:13:37" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "2008:3:37" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1714:5:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "1724:3:37", - "type": "" - } - ], - "src": "1685:349:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_array_bytes4_dyn_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_array$_t_bytes4_$dyn_calldata_ptrt_array$_t_bytes4_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_array_bytes4_dyn_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n let offset_1 := calldataload(add(headStart, 32))\n if gt(offset_1, _1) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_array_bytes4_dyn_calldata(add(headStart, offset_1), dataEnd)\n value2 := value2_1\n value3 := value3_1\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value0 := value\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n ret := add(value, 1)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x45 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2A848091 EQ PUSH2 0x4A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5D PUSH2 0x58 CALLDATASIZE PUSH1 0x4 PUSH2 0x2BE JUMP JUMPDEST PUSH2 0x5F JUMP JUMPDEST STOP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131F PUSH1 0x20 MSTORE PUSH32 0x699D9DAA71B280D05A152715774AFA0A81A312594B2D731D6B0B2552B7D6F69F DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x1BE JUMPI PUSH1 0x1 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP9 DUP9 DUP6 DUP2 DUP2 LT PUSH2 0x138 JUMPI PUSH2 0x138 PUSH2 0x32A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x14D SWAP2 SWAP1 PUSH2 0x359 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 PUSH2 0x1B6 DUP2 PUSH2 0x3A2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x116 JUMP JUMPDEST POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x26A JUMPI PUSH1 0x0 DUP3 PUSH1 0x3 ADD PUSH1 0x0 DUP7 DUP7 DUP6 DUP2 DUP2 LT PUSH2 0x1E4 JUMPI PUSH2 0x1E4 PUSH2 0x32A JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD PUSH1 0x20 DUP2 ADD SWAP1 PUSH2 0x1F9 SWAP2 SWAP1 PUSH2 0x359 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP1 PUSH2 0x262 DUP2 PUSH2 0x3A2 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x1C2 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x29C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x2B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x40 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F8 DUP9 DUP4 DUP10 ADD PUSH2 0x272 JUMP JUMPDEST SWAP1 SWAP7 POP SWAP5 POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x311 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E DUP8 DUP3 DUP9 ADD PUSH2 0x272 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x3FB JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 BALANCE 0xFB 0xE 0xB5 CALLTOKENID BYTE SUB DUP6 0xBD PUSH11 0x44BC21FBAC26F5C5D2102B DUP3 INVALID 0xE 0x4F CALLDATASIZE NATIVEFREEZEEXPIRETIME ADDRESS 0xDB PUSH6 0x866D64736F6C PUSH4 0x4300080B STOP CALLER ", - "sourceMap": "165:902:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;536:529;;;;;;:::i;:::-;;:::i;:::-;;;746:25;646:36;723:49;;;:22;:49;;;:56;;;;775:4;723:56;;;492:45:11;;790:121:6;810:23;;;790:121;;;896:4;854:2;:22;;:39;877:12;;890:1;877:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;854:39;;;;;;;;;;;;;-1:-1:-1;854:39:6;:46;;;;;;;;;;;;;835:3;;;;:::i;:::-;;;;790:121;;;;926:9;921:138;941:31;;;921:138;;;1043:5;993:2;:22;;:47;1016:20;;1037:1;1016:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;993:47;;;;;;;;;;;;;-1:-1:-1;993:47:6;:55;;;;;;;;;;;;;974:3;;;;:::i;:::-;;;;921:138;;;;636:429;536:529;;;;:::o;14:366:37:-;76:8;86:6;140:3;133:4;125:6;121:17;117:27;107:55;;158:1;155;148:12;107:55;-1:-1:-1;181:20:37;;224:18;213:30;;210:50;;;256:1;253;246:12;210:50;293:4;285:6;281:17;269:29;;353:3;346:4;336:6;333:1;329:14;321:6;317:27;313:38;310:47;307:67;;;370:1;367;360:12;307:67;14:366;;;;;:::o;385:769::-;505:6;513;521;529;582:2;570:9;561:7;557:23;553:32;550:52;;;598:1;595;588:12;550:52;638:9;625:23;667:18;708:2;700:6;697:14;694:34;;;724:1;721;714:12;694:34;763:69;824:7;815:6;804:9;800:22;763:69;:::i;:::-;851:8;;-1:-1:-1;737:95:37;-1:-1:-1;939:2:37;924:18;;911:32;;-1:-1:-1;955:16:37;;;952:36;;;984:1;981;974:12;952:36;;1023:71;1086:7;1075:8;1064:9;1060:24;1023:71;:::i;:::-;385:769;;;;-1:-1:-1;1113:8:37;-1:-1:-1;;;;385:769:37:o;1159:184::-;1211:77;1208:1;1201:88;1308:4;1305:1;1298:15;1332:4;1329:1;1322:15;1348:332;1406:6;1459:2;1447:9;1438:7;1434:23;1430:32;1427:52;;;1475:1;1472;1465:12;1427:52;1514:9;1501:23;1564:66;1557:5;1553:78;1546:5;1543:89;1533:117;;1646:1;1643;1636:12;1533:117;1669:5;1348:332;-1:-1:-1;;;1348:332:37:o;1685:349::-;1724:3;1755:66;1748:5;1745:77;1742:257;;;1855:77;1852:1;1845:88;1956:4;1953:1;1946:15;1984:4;1981:1;1974:15;1742:257;-1:-1:-1;2026:1:37;2015:13;;1685:349::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "216000", - "executionCost": "305", - "totalCost": "216305" - }, - "external": { - "setERC165(bytes4[],bytes4[])": "infinite" - } - }, - "methodIdentifiers": { - "setERC165(bytes4[],bytes4[])": "2a848091" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"interfaceIds\",\"type\":\"bytes4[]\"},{\"internalType\":\"bytes4[]\",\"name\":\"interfaceIdsToRemove\",\"type\":\"bytes4[]\"}],\"name\":\"setERC165\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"setERC165(bytes4[],bytes4[])\":{\"params\":{\"interfaceIds\":\"list of interface id to set as supported\",\"interfaceIdsToRemove\":\"list of interface id to unset as supported. Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setERC165(bytes4[],bytes4[])\":{\"notice\":\"set or unset ERC165 using DiamondStorage.supportedInterfaces\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/initializers/DiamondERC165Init.sol\":\"DiamondERC165Init\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/initializers/DiamondERC165Init.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x71a7a882fb6ee26dbfd70ec75d230f6336d2dd05db7e480168aadb53f216ae4b\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x7541f7408d0f74162bc4664d5e012427f2ceaab2abadca0353269ef15ee03d8b\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "setERC165(bytes4[],bytes4[])": { - "notice": "set or unset ERC165 using DiamondStorage.supportedInterfaces" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/DiamondLoupeFacet.json b/extendedArtifactsTron/DiamondLoupeFacet.json deleted file mode 100644 index ceb06c0..0000000 --- a/extendedArtifactsTron/DiamondLoupeFacet.json +++ /dev/null @@ -1,3194 +0,0 @@ -{ - "contractName": "DiamondLoupeFacet", - "sourceName": "solc_0.8/diamond/facets/DiamondLoupeFacet.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b506108868061003a6000396000f3fe608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100815760003560e01c80637a0ed6271161006a5780637a0ed62714610114578063adfca15e14610129578063cdffacc61461014957600080fd5b806301ffc9a71461008657806352ef6b2c146100ff575b600080fd5b6100ea610094366004610583565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6101076101e5565b6040516100f691906105cc565b61011c610277565b6040516100f69190610683565b61013c61013736600461072b565b610483565b6040516100f6919061077f565b6101c0610157366004610583565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f6565b606060007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6002810180546040805160208084028201810190925282815293945083018282801561026c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610241575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e546060907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c908067ffffffffffffffff8111156102d7576102d7610792565b60405190808252806020026020018201604052801561031d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f55790505b50925060005b8181101561047d576000836002018281548110610342576103426107c1565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080858381518110610382576103826107c1565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561044357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116103f05790505b505050505085838151811061045a5761045a6107c1565b602002602001015160200181905250508080610475906107f0565b915050610323565b50505090565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d602090815260409182902080548351818402810184019094528084526060937fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092919083018282801561057657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116105235790505b5050505050915050919050565b60006020828403121561059557600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146105c557600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561061a57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016105e8565b50909695505050505050565b600081518084526020808501945080840160005b838110156106785781517fffffffff00000000000000000000000000000000000000000000000000000000168752958201959082019060010161063a565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561071d578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff16845287015187840187905261070a87850182610626565b95880195935050908601906001016106aa565b509098975050505050505050565b60006020828403121561073d57600080fd5b813574ffffffffffffffffffffffffffffffffffffffffff8116811461076257600080fd5b73ffffffffffffffffffffffffffffffffffffffff169392505050565b6020815260006105c56020830184610626565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610849577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26474726f6e58221220931b1b351a6906fd4ca54e8a470c75479f7064e3cad355f7004d801390c0214864736f6c634300080b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100815760003560e01c80637a0ed6271161006a5780637a0ed62714610114578063adfca15e14610129578063cdffacc61461014957600080fd5b806301ffc9a71461008657806352ef6b2c146100ff575b600080fd5b6100ea610094366004610583565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6101076101e5565b6040516100f691906105cc565b61011c610277565b6040516100f69190610683565b61013c61013736600461072b565b610483565b6040516100f6919061077f565b6101c0610157366004610583565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f6565b606060007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6002810180546040805160208084028201810190925282815293945083018282801561026c57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610241575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e546060907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c908067ffffffffffffffff8111156102d7576102d7610792565b60405190808252806020026020018201604052801561031d57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f55790505b50925060005b8181101561047d576000836002018281548110610342576103426107c1565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080858381518110610382576103826107c1565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561044357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116103f05790505b505050505085838151811061045a5761045a6107c1565b602002602001015160200181905250508080610475906107f0565b915050610323565b50505090565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d602090815260409182902080548351818402810184019094528084526060937fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092919083018282801561057657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116105235790505b5050505050915050919050565b60006020828403121561059557600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146105c557600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561061a57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016105e8565b50909695505050505050565b600081518084526020808501945080840160005b838110156106785781517fffffffff00000000000000000000000000000000000000000000000000000000168752958201959082019060010161063a565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561071d578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff16845287015187840187905261070a87850182610626565b95880195935050908601906001016106aa565b509098975050505050505050565b60006020828403121561073d57600080fd5b813574ffffffffffffffffffffffffffffffffffffffffff8116811461076257600080fd5b73ffffffffffffffffffffffffffffffffffffffff169392505050565b6020815260006105c56020830184610626565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610849577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26474726f6e58221220931b1b351a6906fd4ca54e8a470c75479f7064e3cad355f7004d801390c0214864736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "facetAddress(bytes4)": { - "details": "If facet is not found return address(0).", - "params": { - "_functionSelector": "The function selector." - }, - "returns": { - "facetAddress_": "The facet address." - } - }, - "facetAddresses()": { - "returns": { - "facetAddresses_": "facetAddresses_" - } - }, - "facetFunctionSelectors(address)": { - "params": { - "_facet": "The facet address." - }, - "returns": { - "facetFunctionSelectors_": "facetFunctionSelectors_" - } - }, - "facets()": { - "returns": { - "facets_": "Facet" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x886 DUP1 PUSH2 0x3A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x81 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A0ED627 GT PUSH2 0x6A JUMPI DUP1 PUSH4 0x7A0ED627 EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0xADFCA15E EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0xCDFFACC6 EQ PUSH2 0x149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x86 JUMPI DUP1 PUSH4 0x52EF6B2C EQ PUSH2 0xFF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEA PUSH2 0x94 CALLDATASIZE PUSH1 0x4 PUSH2 0x583 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x107 PUSH2 0x1E5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF6 SWAP2 SWAP1 PUSH2 0x5CC JUMP JUMPDEST PUSH2 0x11C PUSH2 0x277 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF6 SWAP2 SWAP1 PUSH2 0x683 JUMP JUMPDEST PUSH2 0x13C PUSH2 0x137 CALLDATASIZE PUSH1 0x4 PUSH2 0x72B JUMP JUMPDEST PUSH2 0x483 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF6 SWAP2 SWAP1 PUSH2 0x77F JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x157 CALLDATASIZE PUSH1 0x4 PUSH2 0x583 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x26C JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x241 JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131E SLOAD PUSH1 0x60 SWAP1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2D7 JUMPI PUSH2 0x2D7 PUSH2 0x792 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x31D JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2F5 JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x47D JUMPI PUSH1 0x0 DUP4 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x342 JUMPI PUSH2 0x342 PUSH2 0x7C1 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x382 JUMPI PUSH2 0x382 PUSH2 0x7C1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP1 MSTORE SWAP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x443 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x3F0 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x45A JUMPI PUSH2 0x45A PUSH2 0x7C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x475 SWAP1 PUSH2 0x7F0 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x323 JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x576 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x523 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x595 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x5C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x61A JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5E8 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x678 JUMPI DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x63A JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x71D JUMPI DUP9 DUP4 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE DUP8 ADD MLOAD DUP8 DUP5 ADD DUP8 SWAP1 MSTORE PUSH2 0x70A DUP8 DUP6 ADD DUP3 PUSH2 0x626 JUMP JUMPDEST SWAP6 DUP9 ADD SWAP6 SWAP4 POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x6AA JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x73D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x5C5 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x626 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x849 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 SWAP4 SHL SHL CALLDATALOAD BYTE PUSH10 0x6FD4CA54E8A470C7547 SWAP16 PUSH17 0x64E3CAD355F7004D801390C0214864736F PUSH13 0x634300080B0033000000000000 ", - "sourceMap": "539:2484:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@facetAddress_339": { - "entryPoint": null, - "id": 339, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@facetAddresses_312": { - "entryPoint": 485, - "id": 312, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@facetFunctionSelectors_289": { - "entryPoint": 1155, - "id": 289, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@facets_261": { - "entryPoint": 631, - "id": 261, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@supportsInterface_362": { - "entryPoint": null, - "id": 362, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 1835, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes4": { - "entryPoint": 1411, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_array_bytes4_dyn": { - "entryPoint": 1574, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1484, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1919, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1667, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "increment_t_uint256": { - "entryPoint": 2032, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x32": { - "entryPoint": 1985, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1938, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4473:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "83:263:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "129:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "138:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "141:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "131:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "131:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "131:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "104:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "113:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "100:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "100:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "125:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "96:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "96:32:37" - }, - "nodeType": "YulIf", - "src": "93:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "154:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "180:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "167:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "167:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "158:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "300:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "302:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "302:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "212:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "223:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "230:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "219:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "219:78:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "209:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "209:89:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "202:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "202:97:37" - }, - "nodeType": "YulIf", - "src": "199:117:37" - }, - { - "nodeType": "YulAssignment", - "src": "325:15:37", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "335:5:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "325:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes4", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "49:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "60:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "72:6:37", - "type": "" - } - ], - "src": "14:332:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "446:92:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "456:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "468:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "479:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "464:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "464:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "456:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "498:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "523:6:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "516:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "516:14:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "509:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "509:22:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "491:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "491:41:37" - }, - "nodeType": "YulExpressionStatement", - "src": "491:41:37" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "415:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "426:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "437:4:37", - "type": "" - } - ], - "src": "351:187:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "694:530:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "704:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "714:2:37", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "708:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "725:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "743:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "754:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "739:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "739:18:37" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "729:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "773:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "784:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "766:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "766:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "766:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "796:17:37", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "807:6:37" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "800:3:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "822:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "842:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "836:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "836:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "826:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "865:6:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "873:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "858:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "858:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "858:22:37" - }, - { - "nodeType": "YulAssignment", - "src": "889:25:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "900:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "911:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "896:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "896:18:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "889:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "923:29:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "941:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "949:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "937:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "937:15:37" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "927:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "961:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "970:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "965:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1029:169:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1050:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1065:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1059:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1059:13:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1074:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1055:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1055:62:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1043:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1043:75:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1043:75:37" - }, - { - "nodeType": "YulAssignment", - "src": "1131:19:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1142:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1147:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1138:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1138:12:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1131:3:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1163:25:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1177:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1185:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1173:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1173:15:37" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1163:6:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "991:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "994:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "988:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "988:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1002:18:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1004:14:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1013:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1016:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1009:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1009:9:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1004:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "984:3:37", - "statements": [] - }, - "src": "980:218:37" - }, - { - "nodeType": "YulAssignment", - "src": "1207:11:37", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1215:3:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1207:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "663:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "674:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "685:4:37", - "type": "" - } - ], - "src": "543:681:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1289:447:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1299:26:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1319:5:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1313:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1313:12:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1303:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1341:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1346:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1334:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1334:19:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1334:19:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1362:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1372:4:37", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1366:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1385:19:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1396:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1401:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1392:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1392:12:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1385:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1413:28:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1431:5:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1438:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1427:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1427:14:37" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "1417:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1450:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1459:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1454:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1518:193:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1539:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1554:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1548:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1548:13:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1563:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1544:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1544:86:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1532:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1532:99:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1532:99:37" - }, - { - "nodeType": "YulAssignment", - "src": "1644:19:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1655:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1660:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1651:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1651:12:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1644:3:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1676:25:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1690:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1698:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1686:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1686:15:37" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1676:6:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1480:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1483:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1477:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1477:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1491:18:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1493:14:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1502:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1505:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1498:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1498:9:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1493:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1473:3:37", - "statements": [] - }, - "src": "1469:242:37" - }, - { - "nodeType": "YulAssignment", - "src": "1720:10:37", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1727:3:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1720:3:37" - } - ] - } - ] - }, - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1266:5:37", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1273:3:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1281:3:37", - "type": "" - } - ], - "src": "1229:507:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1936:944:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1946:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1956:2:37", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1950:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1967:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1985:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1996:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1981:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1981:18:37" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "1971:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2015:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2026:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2008:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2008:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2008:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2038:17:37", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "2049:6:37" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2042:3:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2064:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2084:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2078:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2078:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2068:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "2107:6:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2115:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2100:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2100:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2100:22:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2131:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2141:2:37", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "2135:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2152:25:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2163:9:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2174:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2159:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2159:18:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2152:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2186:53:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2208:9:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2223:1:37", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2226:6:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2219:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2219:14:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2204:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2204:30:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2236:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2200:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2200:39:37" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "2190:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2248:29:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2266:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2274:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2262:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2262:15:37" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "2252:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2286:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2295:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2290:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2354:497:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2375:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2388:6:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2396:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2384:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2384:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2408:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2380:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2380:95:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2368:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2368:108:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2368:108:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2489:23:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "2505:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2499:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2499:13:37" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "2493:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2532:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2550:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2544:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2544:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2555:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2540:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2540:58:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2525:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2525:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2525:74:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2612:38:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2642:2:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2646:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2638:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2638:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2632:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2632:18:37" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "2616:12:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2674:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2682:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2670:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2670:15:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2687:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2663:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2663:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2663:27:37" - }, - { - "nodeType": "YulAssignment", - "src": "2703:68:37", - "value": { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "2741:12:37" - }, - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2759:6:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2767:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2755:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2755:15:37" - } - ], - "functionName": { - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulIdentifier", - "src": "2713:27:37" - }, - "nodeType": "YulFunctionCall", - "src": "2713:58:37" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2703:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2784:25:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "2798:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2806:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2794:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2794:15:37" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "2784:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2822:19:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2833:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2838:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2829:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2829:12:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2822:3:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2316:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2319:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2313:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2313:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2327:18:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2329:14:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2338:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2341:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2334:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2334:9:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2329:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2309:3:37", - "statements": [] - }, - "src": "2305:546:37" - }, - { - "nodeType": "YulAssignment", - "src": "2860:14:37", - "value": { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2868:6:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2860:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1905:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1916:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1927:4:37", - "type": "" - } - ], - "src": "1741:1139:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2955:290:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3001:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3010:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3013:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3003:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3003:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3003:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2976:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2985:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2972:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2972:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2997:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2968:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2968:32:37" - }, - "nodeType": "YulIf", - "src": "2965:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3026:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3052:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3039:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "3039:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3030:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3150:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3159:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3162:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3152:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3152:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3152:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3084:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3095:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3102:44:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3091:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3091:56:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3081:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3081:67:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3074:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3074:75:37" - }, - "nodeType": "YulIf", - "src": "3071:95:37" - }, - { - "nodeType": "YulAssignment", - "src": "3175:64:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3189:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3196:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3185:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3185:54:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3175:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2921:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2932:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2944:6:37", - "type": "" - } - ], - "src": "2885:360:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3399:109:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3416:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3427:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3409:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3409:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3409:21:37" - }, - { - "nodeType": "YulAssignment", - "src": "3439:63:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3475:6:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3487:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3498:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3483:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3483:18:37" - } - ], - "functionName": { - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulIdentifier", - "src": "3447:27:37" - }, - "nodeType": "YulFunctionCall", - "src": "3447:55:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3439:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3368:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3379:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3390:4:37", - "type": "" - } - ], - "src": "3250:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3614:125:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3624:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3636:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3647:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3632:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3632:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3624:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3666:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3681:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3689:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3677:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3677:55:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3659:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3659:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3659:74:37" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3583:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3594:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3605:4:37", - "type": "" - } - ], - "src": "3513:226:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3776:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3793:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3796:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3786:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3786:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3786:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3890:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3893:4:37", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3883:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3883:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3883:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3914:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3917:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3907:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3907:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3907:15:37" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "3744:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3965:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3982:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3985:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3975:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3975:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3975:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4079:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4082:4:37", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4072:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4072:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4072:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4103:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4106:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4096:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4096:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4096:15:37" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "3933:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4169:302:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4268:168:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4289:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4292:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4282:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4282:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4282:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4390:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4393:4:37", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4383:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4383:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4383:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4418:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4421:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4411:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4411:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4411:15:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4185:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4192:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "4182:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "4182:77:37" - }, - "nodeType": "YulIf", - "src": "4179:257:37" - }, - { - "nodeType": "YulAssignment", - "src": "4445:20:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4456:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4463:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4452:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4452:13:37" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "4445:3:37" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "4151:5:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "4161:3:37", - "type": "" - } - ], - "src": "4122:349:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n pos := add(headStart, 64)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n tail := pos\n }\n function abi_encode_array_bytes4_dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), 0xffffffff00000000000000000000000000000000000000000000000000000000))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 64\n pos := add(headStart, _2)\n let tail_2 := add(add(headStart, shl(5, length)), _2)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0))\n let _3 := mload(srcPtr)\n mstore(tail_2, and(mload(_3), 0xffffffffffffffffffffffffffffffffffffffff))\n let memberValue0 := mload(add(_3, _1))\n mstore(add(tail_2, _1), _2)\n tail_2 := abi_encode_array_bytes4_dyn(memberValue0, add(tail_2, _2))\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n tail := tail_2\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value0 := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_array_bytes4_dyn(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n ret := add(value, 1)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x81 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7A0ED627 GT PUSH2 0x6A JUMPI DUP1 PUSH4 0x7A0ED627 EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0xADFCA15E EQ PUSH2 0x129 JUMPI DUP1 PUSH4 0xCDFFACC6 EQ PUSH2 0x149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x86 JUMPI DUP1 PUSH4 0x52EF6B2C EQ PUSH2 0xFF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEA PUSH2 0x94 CALLDATASIZE PUSH1 0x4 PUSH2 0x583 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131F PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x107 PUSH2 0x1E5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF6 SWAP2 SWAP1 PUSH2 0x5CC JUMP JUMPDEST PUSH2 0x11C PUSH2 0x277 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF6 SWAP2 SWAP1 PUSH2 0x683 JUMP JUMPDEST PUSH2 0x13C PUSH2 0x137 CALLDATASIZE PUSH1 0x4 PUSH2 0x72B JUMP JUMPDEST PUSH2 0x483 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF6 SWAP2 SWAP1 PUSH2 0x77F JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x157 CALLDATASIZE PUSH1 0x4 PUSH2 0x583 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xF6 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x26C JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x241 JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131E SLOAD PUSH1 0x60 SWAP1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2D7 JUMPI PUSH2 0x2D7 PUSH2 0x792 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x31D JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2F5 JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x47D JUMPI PUSH1 0x0 DUP4 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x342 JUMPI PUSH2 0x342 PUSH2 0x7C1 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x382 JUMPI PUSH2 0x382 PUSH2 0x7C1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP1 MSTORE SWAP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x443 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x3F0 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x45A JUMPI PUSH2 0x45A PUSH2 0x7C1 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x475 SWAP1 PUSH2 0x7F0 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x323 JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x576 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x523 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x595 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x5C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x61A JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5E8 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x678 JUMPI DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x63A JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x71D JUMPI DUP9 DUP4 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE DUP8 ADD MLOAD DUP8 DUP5 ADD DUP8 SWAP1 MSTORE PUSH2 0x70A DUP8 DUP6 ADD DUP3 PUSH2 0x626 JUMP JUMPDEST SWAP6 DUP9 ADD SWAP6 SWAP4 POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x6AA JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x73D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x762 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x5C5 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x626 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x849 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 SWAP4 SHL SHL CALLDATALOAD BYTE PUSH10 0x6FD4CA54E8A470C7547 SWAP16 PUSH17 0x64E3CAD355F7004D801390C0214864736F PUSH13 0x634300080B0033000000000000 ", - "sourceMap": "539:2484:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2799:222;;;;;;:::i;:::-;2978:36;;2879:4;2978:36;;;:22;:36;;;;;;;;;2799:222;;;;516:14:37;;509:22;491:41;;479:2;464:18;2799:222:3;;;;;;;;2038:220;;;:::i;:::-;;;;;;;:::i;967:523::-;;;:::i;:::-;;;;;;;:::i;1646:291::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2488:273::-;;;;;;:::i;:::-;2693:48;;2568:21;2693:48;;;492:45:11;2693:48:3;;;;;:61;;;;2488:273;;;;3689:42:37;3677:55;;;3659:74;;3647:2;3632:18;2488:273:3;3513:226:37;2038:220:3;2096:32;2140:36;492:45:11;2234:17:3;;;2216:35;;;;;;;;;;;;;;;;;;;2140:66;;-1:-1:-1;2216:35:3;;2234:17;2216:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2130:128;2038:220;:::o;967:523::-;1147:17;:24;1017:22;;492:45:11;;1147:24:3;1191:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1191:22:3;;;;;;;;;;;;;;;;1181:32;;1228:9;1223:261;1243:9;1239:1;:13;1223:261;;;1273:21;1297:2;:17;;1315:1;1297:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1273:44;;1357:13;1331:7;1339:1;1331:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:39;;;;;;1415:40;;;1331:23;1415:40;;;:25;;;:40;;;;;;;1384:89;;;;;;;;;;;;;;;;;;;1415:40;;1384:89;;;1415:40;1384:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;1392:1;1384:10;;;;;;;;:::i;:::-;;;;;;;:28;;:89;;;;1259:225;1254:3;;;;;:::i;:::-;;;;1223:261;;;;1041:449;;967:523;:::o;1646:291::-;1879:33;;;1777:36;1879:33;;;:25;:33;;;;;;;;;1853:77;;;;;;;;;;;;;;;;;1726:39;;492:45:11;;1853:77:3;;1879:33;1853:77;;;1879:33;1853:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1767:170;1646:291;;;:::o;14:332:37:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;199:117;335:5;14:332;-1:-1:-1;;;14:332:37:o;543:681::-;714:2;766:21;;;836:13;;739:18;;;858:22;;;685:4;;714:2;937:15;;;;911:2;896:18;;;685:4;980:218;994:6;991:1;988:13;980:218;;;1059:13;;1074:42;1055:62;1043:75;;1173:15;;;;1138:12;;;;1016:1;1009:9;980:218;;;-1:-1:-1;1215:3:37;;543:681;-1:-1:-1;;;;;;543:681:37:o;1229:507::-;1281:3;1319:5;1313:12;1346:6;1341:3;1334:19;1372:4;1401:2;1396:3;1392:12;1385:19;;1438:2;1431:5;1427:14;1459:1;1469:242;1483:6;1480:1;1477:13;1469:242;;;1548:13;;1563:66;1544:86;1532:99;;1651:12;;;;1686:15;;;;1505:1;1498:9;1469:242;;;-1:-1:-1;1727:3:37;;1229:507;-1:-1:-1;;;;;1229:507:37:o;1741:1139::-;1927:4;1956:2;1996;1985:9;1981:18;2026:2;2015:9;2008:21;2049:6;2084;2078:13;2115:6;2107;2100:22;2141:2;2131:12;;2174:2;2163:9;2159:18;2152:25;;2236:2;2226:6;2223:1;2219:14;2208:9;2204:30;2200:39;2274:2;2266:6;2262:15;2295:1;2305:546;2319:6;2316:1;2313:13;2305:546;;;2384:22;;;2408:66;2380:95;2368:108;;2499:13;;2544:9;;2555:42;2540:58;2525:74;;2638:11;;2632:18;2670:15;;;2663:27;;;2713:58;2755:15;;;2632:18;2713:58;:::i;:::-;2829:12;;;;2703:68;-1:-1:-1;;2794:15:37;;;;2341:1;2334:9;2305:546;;;-1:-1:-1;2868:6:37;;1741:1139;-1:-1:-1;;;;;;;;1741:1139:37:o;2885:360::-;2944:6;2997:2;2985:9;2976:7;2972:23;2968:32;2965:52;;;3013:1;3010;3003:12;2965:52;3052:9;3039:23;3102:44;3095:5;3091:56;3084:5;3081:67;3071:95;;3162:1;3159;3152:12;3071:95;3196:42;3185:54;;2885:360;-1:-1:-1;;;2885:360:37:o;3250:258::-;3427:2;3416:9;3409:21;3390:4;3447:55;3498:2;3487:9;3483:18;3475:6;3447:55;:::i;3744:184::-;3796:77;3793:1;3786:88;3893:4;3890:1;3883:15;3917:4;3914:1;3907:15;3933:184;3985:77;3982:1;3975:88;4082:4;4079:1;4072:15;4106:4;4103:1;4096:15;4122:349;4161:3;4192:66;4185:5;4182:77;4179:257;;;4292:77;4289:1;4282:88;4393:4;4390:1;4383:15;4421:4;4418:1;4411:15;4179:257;-1:-1:-1;4463:1:37;4452:13;;4122:349::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "436400", - "executionCost": "522", - "totalCost": "436922" - }, - "external": { - "facetAddress(bytes4)": "2585", - "facetAddresses()": "infinite", - "facetFunctionSelectors(address)": "infinite", - "facets()": "infinite", - "supportsInterface(bytes4)": "2528" - } - }, - "methodIdentifiers": { - "facetAddress(bytes4)": "cdffacc6", - "facetAddresses()": "52ef6b2c", - "facetFunctionSelectors(address)": "adfca15e", - "facets()": "7a0ed627", - "supportsInterface(bytes4)": "01ffc9a7" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_functionSelector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facetAddress_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facetAddresses_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"facetFunctionSelectors_\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondLoupe.Facet[]\",\"name\":\"facets_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"facetAddress(bytes4)\":{\"details\":\"If facet is not found return address(0).\",\"params\":{\"_functionSelector\":\"The function selector.\"},\"returns\":{\"facetAddress_\":\"The facet address.\"}},\"facetAddresses()\":{\"returns\":{\"facetAddresses_\":\"facetAddresses_\"}},\"facetFunctionSelectors(address)\":{\"params\":{\"_facet\":\"The facet address.\"},\"returns\":{\"facetFunctionSelectors_\":\"facetFunctionSelectors_\"}},\"facets()\":{\"returns\":{\"facets_\":\"Facet\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"facetAddress(bytes4)\":{\"notice\":\"Gets the facet that supports the given selector.\"},\"facetAddresses()\":{\"notice\":\"Get all the facet addresses used by a diamond.\"},\"facetFunctionSelectors(address)\":{\"notice\":\"Gets all the function selectors provided by a facet.\"},\"facets()\":{\"notice\":\"Gets all facets and their selectors.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\":\"DiamondLoupeFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\",\"keccak256\":\"0x40116a553fb6b8e25371199648a526d61eefee47ba24f0909b00c7301dec612e\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0x10884024af2c0f7deca0fac4ddf84e76da5dba35b6e02fabeac8ea54c1a5c6f7\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x7541f7408d0f74162bc4664d5e012427f2ceaab2abadca0353269ef15ee03d8b\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "facetAddress(bytes4)": { - "notice": "Gets the facet that supports the given selector." - }, - "facetAddresses()": { - "notice": "Get all the facet addresses used by a diamond." - }, - "facetFunctionSelectors(address)": { - "notice": "Gets all the function selectors provided by a facet." - }, - "facets()": { - "notice": "Gets all facets and their selectors." - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/DiamondLoupeFacetWithoutSupportsInterface.json b/extendedArtifactsTron/DiamondLoupeFacetWithoutSupportsInterface.json deleted file mode 100644 index 1f8c313..0000000 --- a/extendedArtifactsTron/DiamondLoupeFacetWithoutSupportsInterface.json +++ /dev/null @@ -1,3047 +0,0 @@ -{ - "contractName": "DiamondLoupeFacetWithoutSupportsInterface", - "sourceName": "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b506107fb8061003a6000396000f3fe608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100665760003560e01c806352ef6b2c1461006b5780637a0ed62714610089578063adfca15e1461009e578063cdffacc6146100be575b600080fd5b61007361015a565b60405161008091906104f8565b60405180910390f35b6100916101ec565b60405161008091906105af565b6100b16100ac366004610657565b6103f8565b60405161008091906106ab565b6101356100cc3660046106c5565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610080565b606060007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c600281018054604080516020808402820181019092528281529394508301828280156101e157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116101b6575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e546060907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c908067ffffffffffffffff81111561024c5761024c610707565b60405190808252806020026020018201604052801561029257816020015b60408051808201909152600081526060602082015281526020019060019003908161026a5790505b50925060005b818110156103f25760008360020182815481106102b7576102b7610736565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050808583815181106102f7576102f7610736565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff92831690529082166000908152600186018252604090819020805482518185028101850190935280835291929091908301828280156103b857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116103655790505b50505050508583815181106103cf576103cf610736565b6020026020010151602001819052505080806103ea90610765565b915050610298565b50505090565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d602090815260409182902080548351818402810184019094528084526060937fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c93909291908301828280156104eb57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116104985790505b5050505050915050919050565b6020808252825182820181905260009190848201906040850190845b8181101561054657835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610514565b50909695505050505050565b600081518084526020808501945080840160005b838110156105a45781517fffffffff000000000000000000000000000000000000000000000000000000001687529582019590820190600101610566565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610649578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff16845287015187840187905261063687850182610552565b95880195935050908601906001016105d6565b509098975050505050505050565b60006020828403121561066957600080fd5b813574ffffffffffffffffffffffffffffffffffffffffff8116811461068e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff169392505050565b6020815260006106be6020830184610552565b9392505050565b6000602082840312156106d757600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146106be57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107be577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26474726f6e58221220f6f9b74d0cd574afd0ff756ba17985c199996f05bb58f6949088dc44a12c89eb64736f6c634300080b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100665760003560e01c806352ef6b2c1461006b5780637a0ed62714610089578063adfca15e1461009e578063cdffacc6146100be575b600080fd5b61007361015a565b60405161008091906104f8565b60405180910390f35b6100916101ec565b60405161008091906105af565b6100b16100ac366004610657565b6103f8565b60405161008091906106ab565b6101356100cc3660046106c5565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610080565b606060007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c600281018054604080516020808402820181019092528281529394508301828280156101e157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116101b6575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e546060907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c908067ffffffffffffffff81111561024c5761024c610707565b60405190808252806020026020018201604052801561029257816020015b60408051808201909152600081526060602082015281526020019060019003908161026a5790505b50925060005b818110156103f25760008360020182815481106102b7576102b7610736565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050808583815181106102f7576102f7610736565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff92831690529082166000908152600186018252604090819020805482518185028101850190935280835291929091908301828280156103b857602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116103655790505b50505050508583815181106103cf576103cf610736565b6020026020010151602001819052505080806103ea90610765565b915050610298565b50505090565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d602090815260409182902080548351818402810184019094528084526060937fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c93909291908301828280156104eb57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116104985790505b5050505050915050919050565b6020808252825182820181905260009190848201906040850190845b8181101561054657835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610514565b50909695505050505050565b600081518084526020808501945080840160005b838110156105a45781517fffffffff000000000000000000000000000000000000000000000000000000001687529582019590820190600101610566565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610649578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff16845287015187840187905261063687850182610552565b95880195935050908601906001016105d6565b509098975050505050505050565b60006020828403121561066957600080fd5b813574ffffffffffffffffffffffffffffffffffffffffff8116811461068e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff169392505050565b6020815260006106be6020830184610552565b9392505050565b6000602082840312156106d757600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146106be57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107be577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26474726f6e58221220f6f9b74d0cd574afd0ff756ba17985c199996f05bb58f6949088dc44a12c89eb64736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "facetAddress(bytes4)": { - "details": "If facet is not found return address(0).", - "params": { - "_functionSelector": "The function selector." - }, - "returns": { - "facetAddress_": "The facet address." - } - }, - "facetAddresses()": { - "returns": { - "facetAddresses_": "facetAddresses_" - } - }, - "facetFunctionSelectors(address)": { - "params": { - "_facet": "The facet address." - }, - "returns": { - "facetFunctionSelectors_": "facetFunctionSelectors_" - } - }, - "facets()": { - "returns": { - "facets_": "Facet" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7FB DUP1 PUSH2 0x3A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x66 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x52EF6B2C EQ PUSH2 0x6B JUMPI DUP1 PUSH4 0x7A0ED627 EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0xADFCA15E EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0xCDFFACC6 EQ PUSH2 0xBE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x73 PUSH2 0x15A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x91 PUSH2 0x1EC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0x5AF JUMP JUMPDEST PUSH2 0xB1 PUSH2 0xAC CALLDATASIZE PUSH1 0x4 PUSH2 0x657 JUMP JUMPDEST PUSH2 0x3F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0x6AB JUMP JUMPDEST PUSH2 0x135 PUSH2 0xCC CALLDATASIZE PUSH1 0x4 PUSH2 0x6C5 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x80 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1B6 JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131E SLOAD PUSH1 0x60 SWAP1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x24C JUMPI PUSH2 0x24C PUSH2 0x707 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x292 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x26A JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP4 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2B7 JUMPI PUSH2 0x2B7 PUSH2 0x736 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2F7 JUMPI PUSH2 0x2F7 PUSH2 0x736 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP1 MSTORE SWAP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3B8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x365 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3CF JUMPI PUSH2 0x3CF PUSH2 0x736 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x3EA SWAP1 PUSH2 0x765 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x298 JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x4EB JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x498 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x546 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x514 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5A4 JUMPI DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x566 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x649 JUMPI DUP9 DUP4 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE DUP8 ADD MLOAD DUP8 DUP5 ADD DUP8 SWAP1 MSTORE PUSH2 0x636 DUP8 DUP6 ADD DUP3 PUSH2 0x552 JUMP JUMPDEST SWAP6 DUP9 ADD SWAP6 SWAP4 POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5D6 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x669 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x68E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x6BE PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x552 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x6BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x7BE JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 0xF6 0xF9 0xB7 0x4D 0xC NATIVEFREEZE PUSH21 0xAFD0FF756BA17985C199996F05BB58F6949088DC44 LOG1 0x2C DUP10 0xEB PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", - "sourceMap": "481:2239:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@facetAddress_519": { - "entryPoint": null, - "id": 519, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@facetAddresses_492": { - "entryPoint": 346, - "id": 492, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@facetFunctionSelectors_469": { - "entryPoint": 1016, - "id": 469, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@facets_441": { - "entryPoint": 492, - "id": 441, - "parameterSlots": 0, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 1623, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes4": { - "entryPoint": 1733, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_array_bytes4_dyn": { - "entryPoint": 1362, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1272, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1707, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 1455, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "increment_t_uint256": { - "entryPoint": 1893, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x32": { - "entryPoint": 1846, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1799, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4281:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "165:530:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "175:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "185:2:37", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "179:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "196:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "214:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "225:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "210:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "210:18:37" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "200:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "244:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "255:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "237:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "237:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "237:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "267:17:37", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "278:6:37" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "271:3:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "293:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "313:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "307:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "307:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "297:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "336:6:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "344:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "329:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "329:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "329:22:37" - }, - { - "nodeType": "YulAssignment", - "src": "360:25:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "371:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "382:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "367:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "367:18:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "360:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "394:29:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "412:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "420:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "408:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "408:15:37" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "398:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "432:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "441:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "436:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "500:169:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "521:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "536:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "530:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "530:13:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "545:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "526:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "526:62:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "514:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "514:75:37" - }, - "nodeType": "YulExpressionStatement", - "src": "514:75:37" - }, - { - "nodeType": "YulAssignment", - "src": "602:19:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "613:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "618:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "609:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "609:12:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "602:3:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "634:25:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "648:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "656:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "644:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "644:15:37" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "634:6:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "462:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "465:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "459:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "459:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "473:18:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "475:14:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "484:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "487:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "480:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "480:9:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "475:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "455:3:37", - "statements": [] - }, - "src": "451:218:37" - }, - { - "nodeType": "YulAssignment", - "src": "678:11:37", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "686:3:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "678:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "134:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "145:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "156:4:37", - "type": "" - } - ], - "src": "14:681:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "760:447:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "770:26:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "790:5:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "784:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "784:12:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "774:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "812:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "817:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "805:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "805:19:37" - }, - "nodeType": "YulExpressionStatement", - "src": "805:19:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "833:14:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "843:4:37", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "837:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "856:19:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "867:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "872:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "863:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "863:12:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "856:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "884:28:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "902:5:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "909:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "898:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "898:14:37" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "888:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "921:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "930:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "925:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "989:193:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1010:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1025:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1019:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1019:13:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1034:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1015:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1015:86:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1003:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1003:99:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1003:99:37" - }, - { - "nodeType": "YulAssignment", - "src": "1115:19:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1126:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1131:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1122:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1122:12:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1115:3:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1147:25:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1161:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1169:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1157:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1157:15:37" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1147:6:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "951:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "954:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "948:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "948:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "962:18:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "964:14:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "973:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "976:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "969:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "969:9:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "964:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "944:3:37", - "statements": [] - }, - "src": "940:242:37" - }, - { - "nodeType": "YulAssignment", - "src": "1191:10:37", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1198:3:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1191:3:37" - } - ] - } - ] - }, - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "737:5:37", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "744:3:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "752:3:37", - "type": "" - } - ], - "src": "700:507:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1407:944:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1417:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1427:2:37", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1421:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1438:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1456:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1467:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1452:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1452:18:37" - }, - "variables": [ - { - "name": "tail_1", - "nodeType": "YulTypedName", - "src": "1442:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1486:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1497:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1479:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1479:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1479:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1509:17:37", - "value": { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "1520:6:37" - }, - "variables": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1513:3:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1535:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1555:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1549:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1549:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1539:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nodeType": "YulIdentifier", - "src": "1578:6:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1586:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1571:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1571:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1571:22:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1602:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1612:2:37", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1606:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1623:25:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1634:9:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1645:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1630:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1630:18:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1623:3:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1657:53:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1679:9:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1694:1:37", - "type": "", - "value": "5" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1697:6:37" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1690:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1690:14:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1675:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1675:30:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1707:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1671:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1671:39:37" - }, - "variables": [ - { - "name": "tail_2", - "nodeType": "YulTypedName", - "src": "1661:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1719:29:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1737:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1745:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1733:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1733:15:37" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "1723:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1757:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1766:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "1761:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1825:497:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1846:3:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "1859:6:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1867:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1855:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1855:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1879:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1851:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1851:95:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1839:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1839:108:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1839:108:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1960:23:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "1976:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1970:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1970:13:37" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1964:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2003:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2021:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2015:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2015:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2026:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2011:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2011:58:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1996:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1996:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1996:74:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2083:38:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2113:2:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2117:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2109:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2109:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2103:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2103:18:37" - }, - "variables": [ - { - "name": "memberValue0", - "nodeType": "YulTypedName", - "src": "2087:12:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2145:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2153:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2141:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2141:15:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2158:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2134:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2134:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2134:27:37" - }, - { - "nodeType": "YulAssignment", - "src": "2174:68:37", - "value": { - "arguments": [ - { - "name": "memberValue0", - "nodeType": "YulIdentifier", - "src": "2212:12:37" - }, - { - "arguments": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2230:6:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2238:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2226:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2226:15:37" - } - ], - "functionName": { - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulIdentifier", - "src": "2184:27:37" - }, - "nodeType": "YulFunctionCall", - "src": "2184:58:37" - }, - "variableNames": [ - { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2174:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2255:25:37", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "2269:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2277:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2265:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2265:15:37" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "2255:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2293:19:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2304:3:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2309:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2300:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2300:12:37" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2293:3:37" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1787:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1790:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1784:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1784:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "1798:18:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1800:14:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1809:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1812:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1805:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1805:9:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "1800:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "1780:3:37", - "statements": [] - }, - "src": "1776:546:37" - }, - { - "nodeType": "YulAssignment", - "src": "2331:14:37", - "value": { - "name": "tail_2", - "nodeType": "YulIdentifier", - "src": "2339:6:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2331:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1376:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1387:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1398:4:37", - "type": "" - } - ], - "src": "1212:1139:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2426:290:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2472:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2481:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2484:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2474:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2474:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2474:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2447:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2456:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2443:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2443:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2468:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2439:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2439:32:37" - }, - "nodeType": "YulIf", - "src": "2436:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2497:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2523:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2510:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "2510:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2501:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2621:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2630:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2633:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2623:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2623:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2623:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2555:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2566:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2573:44:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2562:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2562:56:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2552:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2552:67:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2545:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2545:75:37" - }, - "nodeType": "YulIf", - "src": "2542:95:37" - }, - { - "nodeType": "YulAssignment", - "src": "2646:64:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2660:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2667:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2656:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2656:54:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2646:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2392:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2403:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2415:6:37", - "type": "" - } - ], - "src": "2356:360:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2870:109:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2887:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2898:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2880:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2880:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2880:21:37" - }, - { - "nodeType": "YulAssignment", - "src": "2910:63:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2946:6:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2958:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2969:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2954:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2954:18:37" - } - ], - "functionName": { - "name": "abi_encode_array_bytes4_dyn", - "nodeType": "YulIdentifier", - "src": "2918:27:37" - }, - "nodeType": "YulFunctionCall", - "src": "2918:55:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2910:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2839:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2850:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2861:4:37", - "type": "" - } - ], - "src": "2721:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3053:263:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3099:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3108:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3111:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3101:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3101:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3101:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3074:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3083:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3070:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3070:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3095:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3066:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3066:32:37" - }, - "nodeType": "YulIf", - "src": "3063:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3124:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3150:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3137:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "3137:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3128:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3270:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3279:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3282:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3272:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3272:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3272:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3182:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3193:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3200:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3189:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3189:78:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3179:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3179:89:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3172:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3172:97:37" - }, - "nodeType": "YulIf", - "src": "3169:117:37" - }, - { - "nodeType": "YulAssignment", - "src": "3295:15:37", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3305:5:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3295:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes4", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3019:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3030:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3042:6:37", - "type": "" - } - ], - "src": "2984:332:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3422:125:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3432:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3444:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3455:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3440:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3440:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3432:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3474:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3489:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3497:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3485:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3485:55:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3467:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3467:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3467:74:37" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3391:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3402:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3413:4:37", - "type": "" - } - ], - "src": "3321:226:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3584:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3601:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3604:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3594:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3594:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3594:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3698:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3701:4:37", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3691:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3691:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3691:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3722:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3725:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3715:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3715:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3715:15:37" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "3552:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3773:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3790:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3793:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3783:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3783:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3783:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3887:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3890:4:37", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3880:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3880:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3880:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3911:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3914:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3904:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3904:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3904:15:37" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "3741:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3977:302:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4076:168:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4097:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4100:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4090:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4090:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4090:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4198:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4201:4:37", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4191:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4191:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4191:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4226:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4229:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4219:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4219:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4219:15:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3993:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4000:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "3990:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3990:77:37" - }, - "nodeType": "YulIf", - "src": "3987:257:37" - }, - { - "nodeType": "YulAssignment", - "src": "4253:20:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4264:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4271:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4260:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4260:13:37" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "4253:3:37" - } - ] - } - ] - }, - "name": "increment_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3959:5:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "3969:3:37", - "type": "" - } - ], - "src": "3930:349:37" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n pos := add(headStart, 64)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), 0xffffffffffffffffffffffffffffffffffffffff))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n tail := pos\n }\n function abi_encode_array_bytes4_dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, and(mload(srcPtr), 0xffffffff00000000000000000000000000000000000000000000000000000000))\n pos := add(pos, _1)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_tuple_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_Facet_$690_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 64\n pos := add(headStart, _2)\n let tail_2 := add(add(headStart, shl(5, length)), _2)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0))\n let _3 := mload(srcPtr)\n mstore(tail_2, and(mload(_3), 0xffffffffffffffffffffffffffffffffffffffff))\n let memberValue0 := mload(add(_3, _1))\n mstore(add(tail_2, _1), _2)\n tail_2 := abi_encode_array_bytes4_dyn(memberValue0, add(tail_2, _2))\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n tail := tail_2\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value0 := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_encode_tuple_t_array$_t_bytes4_$dyn_memory_ptr__to_t_array$_t_bytes4_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_array_bytes4_dyn(value0, add(headStart, 32))\n }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function increment_t_uint256(value) -> ret\n {\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n ret := add(value, 1)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x66 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x52EF6B2C EQ PUSH2 0x6B JUMPI DUP1 PUSH4 0x7A0ED627 EQ PUSH2 0x89 JUMPI DUP1 PUSH4 0xADFCA15E EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0xCDFFACC6 EQ PUSH2 0xBE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x73 PUSH2 0x15A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x91 PUSH2 0x1EC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0x5AF JUMP JUMPDEST PUSH2 0xB1 PUSH2 0xAC CALLDATASIZE PUSH1 0x4 PUSH2 0x657 JUMP JUMPDEST PUSH2 0x3F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0x6AB JUMP JUMPDEST PUSH2 0x135 PUSH2 0xCC CALLDATASIZE PUSH1 0x4 PUSH2 0x6C5 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x80 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x2 DUP2 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE SWAP4 SWAP5 POP DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1B6 JUMPI JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131E SLOAD PUSH1 0x60 SWAP1 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP1 DUP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x24C JUMPI PUSH2 0x24C PUSH2 0x707 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x292 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x26A JUMPI SWAP1 POP JUMPDEST POP SWAP3 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP4 PUSH1 0x2 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x2B7 JUMPI PUSH2 0x2B7 PUSH2 0x736 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP1 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2F7 JUMPI PUSH2 0x2F7 PUSH2 0x736 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP1 MSTORE SWAP1 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 DUP7 ADD DUP3 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD DUP3 MLOAD DUP2 DUP6 MUL DUP2 ADD DUP6 ADD SWAP1 SWAP4 MSTORE DUP1 DUP4 MSTORE SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3B8 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x365 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3CF JUMPI PUSH2 0x3CF PUSH2 0x736 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD DUP2 SWAP1 MSTORE POP POP DUP1 DUP1 PUSH2 0x3EA SWAP1 PUSH2 0x765 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x298 JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131D PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP1 SLOAD DUP4 MLOAD DUP2 DUP5 MUL DUP2 ADD DUP5 ADD SWAP1 SWAP5 MSTORE DUP1 DUP5 MSTORE PUSH1 0x60 SWAP4 PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 SWAP2 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x4EB JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x0 SWAP1 JUMPDEST DUP3 DUP3 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xE0 SHL PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x4 ADD SWAP1 PUSH1 0x20 DUP3 PUSH1 0x3 ADD DIV SWAP3 DUP4 ADD SWAP3 PUSH1 0x1 SUB DUP3 MUL SWAP2 POP DUP1 DUP5 GT PUSH2 0x498 JUMPI SWAP1 POP JUMPDEST POP POP POP POP POP SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x546 JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x514 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5A4 JUMPI DUP2 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x566 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP DUP3 DUP7 ADD SWAP2 POP DUP3 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x649 JUMPI DUP9 DUP4 SUB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 MSTORE DUP8 ADD MLOAD DUP8 DUP5 ADD DUP8 SWAP1 MSTORE PUSH2 0x636 DUP8 DUP6 ADD DUP3 PUSH2 0x552 JUMP JUMPDEST SWAP6 DUP9 ADD SWAP6 SWAP4 POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5D6 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x669 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x68E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0x6BE PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x552 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x6BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x7BE JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x1 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 0xF6 0xF9 0xB7 0x4D 0xC NATIVEFREEZE PUSH21 0xAFD0FF756BA17985C199996F05BB58F6949088DC44 LOG1 0x2C DUP10 0xEB PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", - "sourceMap": "481:2239:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1995:220;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;924:523;;;:::i;:::-;;;;;;;:::i;1603:291::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2445:273::-;;;;;;:::i;:::-;2650:48;;2525:21;2650:48;;;492:45:11;2650:48:4;;;;;:61;;;;2445:273;;;;3497:42:37;3485:55;;;3467:74;;3455:2;3440:18;2445:273:4;3321:226:37;1995:220:4;2053:32;2097:36;492:45:11;2191:17:4;;;2173:35;;;;;;;;;;;;;;;;;;;2097:66;;-1:-1:-1;2173:35:4;;2191:17;2173:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2087:128;1995:220;:::o;924:523::-;1104:17;:24;974:22;;492:45:11;;1104:24:4;1148:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1148:22:4;;;;;;;;;;;;;;;;1138:32;;1185:9;1180:261;1200:9;1196:1;:13;1180:261;;;1230:21;1254:2;:17;;1272:1;1254:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1230:44;;1314:13;1288:7;1296:1;1288:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:39;;;;;;1372:40;;;1288:23;1372:40;;;:25;;;:40;;;;;;;1341:89;;;;;;;;;;;;;;;;;;;1372:40;;1341:89;;;1372:40;1341:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;1349:1;1341:10;;;;;;;;:::i;:::-;;;;;;;:28;;:89;;;;1216:225;1211:3;;;;;:::i;:::-;;;;1180:261;;;;998:449;;924:523;:::o;1603:291::-;1836:33;;;1734:36;1836:33;;;:25;:33;;;;;;;;;1810:77;;;;;;;;;;;;;;;;;1683:39;;492:45:11;;1810:77:4;;1836:33;1810:77;;;1836:33;1810:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1724:170;1603:291;;;:::o;14:681:37:-;185:2;237:21;;;307:13;;210:18;;;329:22;;;156:4;;185:2;408:15;;;;382:2;367:18;;;156:4;451:218;465:6;462:1;459:13;451:218;;;530:13;;545:42;526:62;514:75;;644:15;;;;609:12;;;;487:1;480:9;451:218;;;-1:-1:-1;686:3:37;;14:681;-1:-1:-1;;;;;;14:681:37:o;700:507::-;752:3;790:5;784:12;817:6;812:3;805:19;843:4;872:2;867:3;863:12;856:19;;909:2;902:5;898:14;930:1;940:242;954:6;951:1;948:13;940:242;;;1019:13;;1034:66;1015:86;1003:99;;1122:12;;;;1157:15;;;;976:1;969:9;940:242;;;-1:-1:-1;1198:3:37;;700:507;-1:-1:-1;;;;;700:507:37:o;1212:1139::-;1398:4;1427:2;1467;1456:9;1452:18;1497:2;1486:9;1479:21;1520:6;1555;1549:13;1586:6;1578;1571:22;1612:2;1602:12;;1645:2;1634:9;1630:18;1623:25;;1707:2;1697:6;1694:1;1690:14;1679:9;1675:30;1671:39;1745:2;1737:6;1733:15;1766:1;1776:546;1790:6;1787:1;1784:13;1776:546;;;1855:22;;;1879:66;1851:95;1839:108;;1970:13;;2015:9;;2026:42;2011:58;1996:74;;2109:11;;2103:18;2141:15;;;2134:27;;;2184:58;2226:15;;;2103:18;2184:58;:::i;:::-;2300:12;;;;2174:68;-1:-1:-1;;2265:15:37;;;;1812:1;1805:9;1776:546;;;-1:-1:-1;2339:6:37;;1212:1139;-1:-1:-1;;;;;;;;1212:1139:37:o;2356:360::-;2415:6;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;2523:9;2510:23;2573:44;2566:5;2562:56;2555:5;2552:67;2542:95;;2633:1;2630;2623:12;2542:95;2667:42;2656:54;;2356:360;-1:-1:-1;;;2356:360:37:o;2721:258::-;2898:2;2887:9;2880:21;2861:4;2918:55;2969:2;2958:9;2954:18;2946:6;2918:55;:::i;:::-;2910:63;2721:258;-1:-1:-1;;;2721:258:37:o;2984:332::-;3042:6;3095:2;3083:9;3074:7;3070:23;3066:32;3063:52;;;3111:1;3108;3101:12;3063:52;3150:9;3137:23;3200:66;3193:5;3189:78;3182:5;3179:89;3169:117;;3282:1;3279;3272:12;3552:184;3604:77;3601:1;3594:88;3701:4;3698:1;3691:15;3725:4;3722:1;3715:15;3741:184;3793:77;3790:1;3783:88;3890:4;3887:1;3880:15;3914:4;3911:1;3904:15;3930:349;3969:3;4000:66;3993:5;3990:77;3987:257;;;4100:77;4097:1;4090:88;4201:4;4198:1;4191:15;4229:4;4226:1;4219:15;3987:257;-1:-1:-1;4271:1:37;4260:13;;3930:349::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "408600", - "executionCost": "491", - "totalCost": "409091" - }, - "external": { - "facetAddress(bytes4)": "2585", - "facetAddresses()": "infinite", - "facetFunctionSelectors(address)": "infinite", - "facets()": "infinite" - } - }, - "methodIdentifiers": { - "facetAddress(bytes4)": "cdffacc6", - "facetAddresses()": "52ef6b2c", - "facetFunctionSelectors(address)": "adfca15e", - "facets()": "7a0ed627" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_functionSelector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facetAddress_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facetAddresses_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"facetFunctionSelectors_\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondLoupe.Facet[]\",\"name\":\"facets_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"facetAddress(bytes4)\":{\"details\":\"If facet is not found return address(0).\",\"params\":{\"_functionSelector\":\"The function selector.\"},\"returns\":{\"facetAddress_\":\"The facet address.\"}},\"facetAddresses()\":{\"returns\":{\"facetAddresses_\":\"facetAddresses_\"}},\"facetFunctionSelectors(address)\":{\"params\":{\"_facet\":\"The facet address.\"},\"returns\":{\"facetFunctionSelectors_\":\"facetFunctionSelectors_\"}},\"facets()\":{\"returns\":{\"facets_\":\"Facet\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"facetAddress(bytes4)\":{\"notice\":\"Gets the facet that supports the given selector.\"},\"facetAddresses()\":{\"notice\":\"Get all the facet addresses used by a diamond.\"},\"facetFunctionSelectors(address)\":{\"notice\":\"Gets all the function selectors provided by a facet.\"},\"facets()\":{\"notice\":\"Gets all facets and their selectors.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\":\"DiamondLoupeFacetWithoutSupportsInterface\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\",\"keccak256\":\"0x5332a757bc4ad695e81685f1e838a7c7b2127e7aae8c510546126393be4036aa\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0x10884024af2c0f7deca0fac4ddf84e76da5dba35b6e02fabeac8ea54c1a5c6f7\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "facetAddress(bytes4)": { - "notice": "Gets the facet that supports the given selector." - }, - "facetAddresses()": { - "notice": "Get all the facet addresses used by a diamond." - }, - "facetFunctionSelectors(address)": { - "notice": "Gets all the function selectors provided by a facet." - }, - "facets()": { - "notice": "Gets all facets and their selectors." - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/EIP173Proxy.json b/extendedArtifactsTron/EIP173Proxy.json deleted file mode 100644 index 586e351..0000000 --- a/extendedArtifactsTron/EIP173Proxy.json +++ /dev/null @@ -1,4707 +0,0 @@ -{ - "contractName": "EIP173Proxy", - "sourceName": "solc_0.8/proxy/EIP173Proxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "implementationAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "ownerAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ProxyImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "id", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405260405162000d5b38038062000d5b833981016040819052620000269162000209565b620000318262000046565b6200003d8382620000b8565b50505062000307565b60006200006060008051602062000d3b8339815191525490565b90508160008051602062000d3b83398151915255816001600160a01b0316816001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8054908390556040516001600160a01b0380851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a381511562000195576000836001600160a01b0316836040516200013c9190620002e9565b600060405180830381855af49150503d806000811462000179576040519150601f19603f3d011682016040523d82523d6000602084013e6200017e565b606091505b505090508062000193573d806000803e806000fd5b505b505050565b80516000906001600160a81b0381168114620001b557600080fd5b6001600160a01b031692915050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001f7578181015183820152602001620001dd565b83811115620001935750506000910152565b6000806000606084860312156200021f57600080fd5b6200022a846200019a565b92506200023a602085016200019a565b60408501519092506001600160401b03808211156200025857600080fd5b818601915086601f8301126200026d57600080fd5b815181811115620002825762000282620001c4565b604051601f8201601f19908116603f01168101908382118183101715620002ad57620002ad620001c4565b81604052828152896020848701011115620002c757600080fd5b620002da836020830160208801620001da565b80955050505050509250925092565b60008251620002fd818460208701620001da565b9190910192915050565b610a2480620003176000396000f3fe60806040526004361061005e5760003560e01c80634f1ef286116100435780634f1ef2861461015d5780638da5cb5b14610170578063f2fde38b146101c4576100ca565b806301ffc9a7146100d45780633659cfe614610123576100ca565b366100ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f45544845525f52454a454354454400000000000000000000000000000000000060448201526064015b60405180910390fd5b6100d26101fe565b005b3480156100e057600080fd5b50d380156100ed57600080fd5b50d280156100fa57600080fd5b5061010e61010936600461086e565b610249565b60405190151581526020015b60405180910390f35b34801561012f57600080fd5b50d3801561013c57600080fd5b50d2801561014957600080fd5b506100d26101583660046108f3565b610417565b6100d261016b36600461090e565b6104e9565b34801561017c57600080fd5b50d3801561018957600080fd5b50d2801561019657600080fd5b5061019f6105e4565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161011a565b3480156101d057600080fd5b50d380156101dd57600080fd5b50d280156101ea57600080fd5b506100d26101f93660046108f3565b610613565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460003681823780813683855af491503d8082833e82801561023f578183f35b8183fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806102dc57507f7f5828d0000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b156102e957506001919050565b7fffffffff00000000000000000000000000000000000000000000000000000000808316141561031b57506000919050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008416600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa925050508015610403575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261040091810190610991565b60015b6104105750600092915050565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b6104e681604051806020016040528060008152506106d2565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b6105df8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106d292505050565b505050565b600061060e7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905090565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b6104e6816107c1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80549083905560405173ffffffffffffffffffffffffffffffffffffffff80851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a38151156105df5760008373ffffffffffffffffffffffffffffffffffffffff168360405161076d91906109b3565b600060405180830381855af49150503d80600081146107a8576040519150601f19603f3d011682016040523d82523d6000602084013e6107ad565b606091505b5050905080610243573d806000803e806000fd5b60006107eb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b9050817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006020828403121561088057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461041057600080fd5b6000813574ffffffffffffffffffffffffffffffffffffffffff811681146108d757600080fd5b73ffffffffffffffffffffffffffffffffffffffff1692915050565b60006020828403121561090557600080fd5b610410826108b0565b60008060006040848603121561092357600080fd5b61092c846108b0565b9250602084013567ffffffffffffffff8082111561094957600080fd5b818601915086601f83011261095d57600080fd5b81358181111561096c57600080fd5b87602082850101111561097e57600080fd5b6020830194508093505050509250925092565b6000602082840312156109a357600080fd5b8151801515811461041057600080fd5b6000825160005b818110156109d457602081860181015185830152016109ba565b818111156109e3576000828501525b50919091019291505056fea26474726f6e58221220502bbd35210ff45922dbd7c4cd2b82297db50dff9e1077c3d0476912d8eb5e1664736f6c634300080b0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", - "deployedBytecode": "0x60806040526004361061005e5760003560e01c80634f1ef286116100435780634f1ef2861461015d5780638da5cb5b14610170578063f2fde38b146101c4576100ca565b806301ffc9a7146100d45780633659cfe614610123576100ca565b366100ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f45544845525f52454a454354454400000000000000000000000000000000000060448201526064015b60405180910390fd5b6100d26101fe565b005b3480156100e057600080fd5b50d380156100ed57600080fd5b50d280156100fa57600080fd5b5061010e61010936600461086e565b610249565b60405190151581526020015b60405180910390f35b34801561012f57600080fd5b50d3801561013c57600080fd5b50d2801561014957600080fd5b506100d26101583660046108f3565b610417565b6100d261016b36600461090e565b6104e9565b34801561017c57600080fd5b50d3801561018957600080fd5b50d2801561019657600080fd5b5061019f6105e4565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161011a565b3480156101d057600080fd5b50d380156101dd57600080fd5b50d280156101ea57600080fd5b506100d26101f93660046108f3565b610613565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460003681823780813683855af491503d8082833e82801561023f578183f35b8183fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806102dc57507f7f5828d0000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b156102e957506001919050565b7fffffffff00000000000000000000000000000000000000000000000000000000808316141561031b57506000919050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008416600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa925050508015610403575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261040091810190610991565b60015b6104105750600092915050565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b6104e681604051806020016040528060008152506106d2565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b6105df8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106d292505050565b505050565b600061060e7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905090565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016100c1565b6104e6816107c1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80549083905560405173ffffffffffffffffffffffffffffffffffffffff80851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a38151156105df5760008373ffffffffffffffffffffffffffffffffffffffff168360405161076d91906109b3565b600060405180830381855af49150503d80600081146107a8576040519150601f19603f3d011682016040523d82523d6000602084013e6107ad565b606091505b5050905080610243573d806000803e806000fd5b60006107eb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b9050817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006020828403121561088057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461041057600080fd5b6000813574ffffffffffffffffffffffffffffffffffffffffff811681146108d757600080fd5b73ffffffffffffffffffffffffffffffffffffffff1692915050565b60006020828403121561090557600080fd5b610410826108b0565b60008060006040848603121561092357600080fd5b61092c846108b0565b9250602084013567ffffffffffffffff8082111561094957600080fd5b818601915086601f83011261095d57600080fd5b81358181111561096c57600080fd5b87602082850101111561097e57600080fd5b6020830194508093505050509250925092565b6000602082840312156109a357600080fd5b8151801515811461041057600080fd5b6000825160005b818110156109d457602081860181015185830152016109ba565b818111156109e3576000828501525b50919091019291505056fea26474726f6e58221220502bbd35210ff45922dbd7c4cd2b82297db50dff9e1077c3d0476912d8eb5e1664736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_3586": { - "entryPoint": null, - "id": 3586, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_owner_3702": { - "entryPoint": null, - "id": 3702, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_4036": { - "entryPoint": 184, - "id": 4036, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setOwner_3719": { - "entryPoint": 70, - "id": 3719, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 410, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 521, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 745, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 474, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 452, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1986:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:178:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "84:28:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "105:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "99:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "99:13:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "88:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "179:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "188:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "191:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "181:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "181:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "181:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "134:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "147:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "164:3:37", - "type": "", - "value": "168" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "169:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "160:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "160:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "173:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "156:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "156:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "143:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "143:33:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "131:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "131:46:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "124:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "124:54:37" - }, - "nodeType": "YulIf", - "src": "121:74:37" - }, - { - "nodeType": "YulAssignment", - "src": "204:42:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "217:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "234:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "239:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "230:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "230:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "226:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "226:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "213:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "213:33:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "204:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:37", - "type": "" - } - ], - "src": "14:238:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "289:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "306:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "313:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "318:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "309:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "309:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "299:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "299:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "299:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "346:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "349:4:37", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "339:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "339:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "339:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "370:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "373:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "363:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "363:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "363:15:37" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "257:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "442:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "452:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "461:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "456:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "521:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "546:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "551:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "542:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "542:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "565:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "570:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "561:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "561:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "555:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "555:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "535:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "535:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "535:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "482:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "485:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "479:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "479:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "493:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "495:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "504:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "507:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "500:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "500:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "495:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "475:3:37", - "statements": [] - }, - "src": "471:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "623:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "628:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "619:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "619:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "637:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "612:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "612:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "612:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "599:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "602:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "596:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "596:13:37" - }, - "nodeType": "YulIf", - "src": "593:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "420:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "425:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "430:6:37", - "type": "" - } - ], - "src": "389:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "776:929:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "822:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "831:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "834:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "824:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "824:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "824:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "797:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "806:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "793:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "793:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "818:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "789:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "789:32:37" - }, - "nodeType": "YulIf", - "src": "786:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "847:50:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "887:9:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "857:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "857:40:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "847:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "906:59:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "950:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "961:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "946:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "946:18:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "916:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "916:49:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "906:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "974:39:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "998:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1009:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "994:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "994:18:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "988:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "988:25:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "978:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1022:28:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1040:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1044:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1036:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1036:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1048:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1032:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1032:18:37" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1026:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1077:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1086:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1089:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1079:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1079:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1079:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1065:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1073:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1062:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1062:14:37" - }, - "nodeType": "YulIf", - "src": "1059:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1102:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1116:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1127:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1112:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1112:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1106:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1182:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1191:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1194:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1184:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1184:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1184:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1161:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1165:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1157:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1157:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1172:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1153:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1153:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1146:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1146:35:37" - }, - "nodeType": "YulIf", - "src": "1143:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1207:19:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1223:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1217:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1217:9:37" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1211:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1249:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1251:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1251:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1251:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1241:2:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1245:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1238:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1238:10:37" - }, - "nodeType": "YulIf", - "src": "1235:36:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1280:17:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1294:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1290:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1290:7:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1284:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1306:23:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1326:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1320:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1320:9:37" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1310:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1338:71:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1360:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1384:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1388:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1380:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1380:13:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1395:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1376:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1376:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1400:2:37", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1372:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1372:31:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1405:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1368:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1368:40:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1356:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1356:53:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1342:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1468:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1470:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1470:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1470:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1427:10:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1439:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1424:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1424:18:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1447:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1459:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1444:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1444:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1421:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1421:46:37" - }, - "nodeType": "YulIf", - "src": "1418:72:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1506:2:37", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1510:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1499:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1499:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1499:22:37" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1537:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1545:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1530:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1530:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1530:18:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1594:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1603:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1606:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1596:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1596:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1596:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1571:2:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1575:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1567:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1567:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1580:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1563:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1563:20:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1585:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1560:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1560:33:37" - }, - "nodeType": "YulIf", - "src": "1557:53:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1645:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1649:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1641:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1641:11:37" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1658:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1666:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1654:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1654:15:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1671:2:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1619:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "1619:55:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1619:55:37" - }, - { - "nodeType": "YulAssignment", - "src": "1683:16:37", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1693:6:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1683:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "726:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "737:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "749:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "757:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "765:6:37", - "type": "" - } - ], - "src": "652:1053:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1847:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1857:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1877:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1871:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1871:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1861:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1919:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1927:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1915:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1915:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1934:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1939:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1893:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "1893:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1893:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "1955:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1966:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1971:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1962:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1962:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1955:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1823:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1828:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1839:3:37", - "type": "" - } - ], - "src": "1710:274:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n let value_1 := mload(offset)\n if iszero(eq(value_1, and(value_1, sub(shl(168, 1), 1)))) { revert(0, 0) }\n value := and(value_1, sub(shl(160, 1), 1))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n let offset := mload(add(headStart, 64))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value2 := memPtr\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xD5B CODESIZE SUB DUP1 PUSH3 0xD5B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x209 JUMP JUMPDEST PUSH3 0x31 DUP3 PUSH3 0x46 JUMP JUMPDEST PUSH3 0x3D DUP4 DUP3 PUSH3 0xB8 JUMP JUMPDEST POP POP POP PUSH3 0x307 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x60 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xD3B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xD3B DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH3 0x195 JUMPI PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD PUSH3 0x13C SWAP2 SWAP1 PUSH3 0x2E9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x179 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x17E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH3 0x193 JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x1F7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x1DD JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x193 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x22A DUP5 PUSH3 0x19A JUMP JUMPDEST SWAP3 POP PUSH3 0x23A PUSH1 0x20 DUP6 ADD PUSH3 0x19A JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x258 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x282 JUMPI PUSH3 0x282 PUSH3 0x1C4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x2AD JUMPI PUSH3 0x2AD PUSH3 0x1C4 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x2C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2DA DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x1DA JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x2FD DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x1DA JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xA24 DUP1 PUSH3 0x317 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4F1EF286 GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x15D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x170 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1C4 JUMPI PUSH2 0xCA JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x123 JUMPI PUSH2 0xCA JUMP JUMPDEST CALLDATASIZE PUSH2 0xCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45544845525F52454A4543544544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xD2 PUSH2 0x1FE JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0xED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0xFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10E PUSH2 0x109 CALLDATASIZE PUSH1 0x4 PUSH2 0x86E JUMP JUMPDEST PUSH2 0x249 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x13C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x158 CALLDATASIZE PUSH1 0x4 PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x417 JUMP JUMPDEST PUSH2 0xD2 PUSH2 0x16B CALLDATASIZE PUSH1 0x4 PUSH2 0x90E JUMP JUMPDEST PUSH2 0x4E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x17C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19F PUSH2 0x5E4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x11A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x1F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x613 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x0 CALLDATASIZE DUP2 DUP3 CALLDATACOPY DUP1 DUP2 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP4 RETURNDATACOPY DUP3 DUP1 ISZERO PUSH2 0x23F JUMPI DUP2 DUP4 RETURN JUMPDEST DUP2 DUP4 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ DUP1 PUSH2 0x2DC JUMPI POP PUSH32 0x7F5828D000000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST ISZERO PUSH2 0x2E9 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND EQ ISZERO PUSH2 0x31B JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x40 MLOAD PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x1FFC9A7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x403 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x400 SWAP2 DUP2 ADD SWAP1 PUSH2 0x991 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x410 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x4E6 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x6D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x59F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x5DF DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x6D2 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x60E PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x6C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x4E6 DUP2 PUSH2 0x7C1 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH2 0x5DF JUMPI PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x76D SWAP2 SWAP1 PUSH2 0x9B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7A8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x7AD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x243 JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7EB PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x880 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x410 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x905 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x410 DUP3 PUSH2 0x8B0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x923 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x92C DUP5 PUSH2 0x8B0 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x949 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x95D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x96C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x97E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x410 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9D4 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x9BA JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x9E3 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 POP 0x2B 0xBD CALLDATALOAD 0x21 0xF DELEGATECALL MSIZE 0x22 0xDB NATIVEFREEZEEXPIRETIME 0xC4 0xCD 0x2B DUP3 0x29 PUSH30 0xB50DFF9E1077C3D0476912D8EB5E1664736F6C634300080B0033B5312768 0x4A JUMP DUP12 BALANCE PUSH20 0xAE13B9F8A6016E243E63B6E8EE1178D6A717850B 0x5D PUSH2 0x300 ", - "sourceMap": "236:3020:32:-:0;;;591:219;;;;;;;;;;;;;;;;;;:::i;:::-;723:23;733:12;723:9;:23::i;:::-;756:47;775:21;798:4;756:18;:47::i;:::-;591:219;;;236:3020;;2908:346;2964:21;2988:8;-1:-1:-1;;;;;;;;;;;2813:73:32;;2636:266;2988:8;2964:32;;3169:8;-1:-1:-1;;;;;;;;;;;3094:84:32;3238:8;-1:-1:-1;;;;;3202:45:32;3223:13;-1:-1:-1;;;;;3202:45:32;;;;;;;;;;;2954:300;2908:346;:::o;1377:1068:36:-;1630:66;1624:73;;1805:93;;;;1923:69;;-1:-1:-1;;;;;1923:69:36;;;;;;;;;;1470:30;;1923:69;2007:11;;:15;2003:436;;2039:12;2057:17;-1:-1:-1;;;;;2057:30:36;2088:4;2057:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:55;;;2112:7;2107:322;;2278:16;2336:14;2333:1;;2315:36;2382:14;2333:1;2372:25;2107:322;2024:415;2003:436;1460:985;1377:1068;;:::o;14:238:37:-;99:13;;64:5;;-1:-1:-1;;;;;143:33:37;;131:46;;121:74;;191:1;188;181:12;121:74;-1:-1:-1;;;;;213:33:37;;14:238;-1:-1:-1;;14:238:37:o;257:127::-;318:10;313:3;309:20;306:1;299:31;349:4;346:1;339:15;373:4;370:1;363:15;389:258;461:1;471:113;485:6;482:1;479:13;471:113;;;561:11;;;555:18;542:11;;;535:39;507:2;500:10;471:113;;;602:6;599:1;596:13;593:48;;;-1:-1:-1;;637:1:37;619:16;;612:27;389:258::o;652:1053::-;749:6;757;765;818:2;806:9;797:7;793:23;789:32;786:52;;;834:1;831;824:12;786:52;857:40;887:9;857:40;:::i;:::-;847:50;;916:49;961:2;950:9;946:18;916:49;:::i;:::-;1009:2;994:18;;988:25;906:59;;-1:-1:-1;;;;;;1062:14:37;;;1059:34;;;1089:1;1086;1079:12;1059:34;1127:6;1116:9;1112:22;1102:32;;1172:7;1165:4;1161:2;1157:13;1153:27;1143:55;;1194:1;1191;1184:12;1143:55;1223:2;1217:9;1245:2;1241;1238:10;1235:36;;;1251:18;;:::i;:::-;1326:2;1320:9;1294:2;1380:13;;-1:-1:-1;;1376:22:37;;;1400:2;1372:31;1368:40;1356:53;;;1424:18;;;1444:22;;;1421:46;1418:72;;;1470:18;;:::i;:::-;1510:10;1506:2;1499:22;1545:2;1537:6;1530:18;1585:7;1580:2;1575;1571;1567:11;1563:20;1560:33;1557:53;;;1606:1;1603;1596:12;1557:53;1619:55;1671:2;1666;1658:6;1654:15;1649:2;1645;1641:11;1619:55;:::i;:::-;1693:6;1683:16;;;;;;;652:1053;;;;;:::o;1710:274::-;1839:3;1877:6;1871:13;1893:53;1939:6;1934:3;1927:4;1919:6;1915:17;1893:53;:::i;:::-;1962:16;;;;;1710:274;-1:-1:-1;;1710:274:37:o;:::-;236:3020:32;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_3988": { - "entryPoint": null, - "id": 3988, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_3995": { - "entryPoint": null, - "id": 3995, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_fallback_4000": { - "entryPoint": 510, - "id": 4000, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_owner_3702": { - "entryPoint": null, - "id": 3702, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_4036": { - "entryPoint": 1746, - "id": 4036, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setOwner_3719": { - "entryPoint": 1985, - "id": 3719, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@owner_3595": { - "entryPoint": 1508, - "id": 3595, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@supportsInterface_3642": { - "entryPoint": 585, - "id": 3642, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@transferOwnership_3654": { - "entryPoint": 1555, - "id": 3654, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@upgradeToAndCall_3682": { - "entryPoint": 1257, - "id": 3682, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@upgradeTo_3667": { - "entryPoint": 1047, - "id": 3667, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 2224, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 2291, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_calldata_ptr": { - "entryPoint": 2318, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 2449, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes4": { - "entryPoint": 2158, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 2483, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_ef8a4c3fcfbfa959f184421d0ef9a577b18116cafbc5879aff4e2f1881c7c1f0__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3571:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "188:164:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "205:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "216:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "198:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "198:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "198:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "239:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "250:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "235:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "235:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "255:2:37", - "type": "", - "value": "14" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "228:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "228:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "228:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "278:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "289:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "274:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "274:18:37" - }, - { - "hexValue": "45544845525f52454a4543544544", - "kind": "string", - "nodeType": "YulLiteral", - "src": "294:16:37", - "type": "", - "value": "ETHER_REJECTED" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "267:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "267:44:37" - }, - "nodeType": "YulExpressionStatement", - "src": "267:44:37" - }, - { - "nodeType": "YulAssignment", - "src": "320:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "332:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "328:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "328:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "320:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_ef8a4c3fcfbfa959f184421d0ef9a577b18116cafbc5879aff4e2f1881c7c1f0__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "165:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "179:4:37", - "type": "" - } - ], - "src": "14:338:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "426:263:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "472:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "481:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "484:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "474:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "474:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "474:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "447:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "456:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "443:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "443:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "468:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "439:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "439:32:37" - }, - "nodeType": "YulIf", - "src": "436:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "497:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "523:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "510:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "510:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "501:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "643:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "652:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "655:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "645:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "645:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "645:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "555:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "566:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "573:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "562:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "562:78:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "552:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "552:89:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "545:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "545:97:37" - }, - "nodeType": "YulIf", - "src": "542:117:37" - }, - { - "nodeType": "YulAssignment", - "src": "668:15:37", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "678:5:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "668:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes4", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "392:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "403:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "415:6:37", - "type": "" - } - ], - "src": "357:332:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "789:92:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "799:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "811:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "822:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "807:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "807:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "799:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "841:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "866:6:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "859:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "859:14:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "852:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "852:22:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "834:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "834:41:37" - }, - "nodeType": "YulExpressionStatement", - "src": "834:41:37" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "758:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "769:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "780:4:37", - "type": "" - } - ], - "src": "694:187:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "935:233:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "945:35:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "973:6:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "960:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "960:20:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "949:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1072:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1081:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1084:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1074:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1074:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1074:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "1002:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "1015:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1024:44:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1011:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1011:58:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "999:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "999:71:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "992:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "992:79:37" - }, - "nodeType": "YulIf", - "src": "989:99:37" - }, - { - "nodeType": "YulAssignment", - "src": "1097:65:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "1110:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1119:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1106:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1106:56:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1097:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "914:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "925:5:37", - "type": "" - } - ], - "src": "886:282:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1243:116:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1289:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1298:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1301:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1291:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1291:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1291:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1264:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1273:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1260:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1260:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1285:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1256:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1256:32:37" - }, - "nodeType": "YulIf", - "src": "1253:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "1314:39:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1343:9:37" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1324:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "1324:29:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1314:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1209:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1220:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1232:6:37", - "type": "" - } - ], - "src": "1173:186:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1470:559:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1516:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1525:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1528:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1518:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1518:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1518:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1491:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1500:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1487:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1487:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1512:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1483:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1483:32:37" - }, - "nodeType": "YulIf", - "src": "1480:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "1541:39:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1570:9:37" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1551:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "1551:29:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1541:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1589:46:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1620:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1631:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1616:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1616:18:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1603:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "1603:32:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1593:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1644:28:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1654:18:37", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1648:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1699:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1708:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1711:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1701:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1701:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1701:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1687:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1695:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1684:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1684:14:37" - }, - "nodeType": "YulIf", - "src": "1681:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1724:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1738:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1749:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1734:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1734:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1728:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1804:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1813:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1816:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1806:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1806:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1806:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1783:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1787:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1779:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1779:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1794:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1775:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1775:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1768:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1768:35:37" - }, - "nodeType": "YulIf", - "src": "1765:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1829:30:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1856:2:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1843:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "1843:16:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1833:6:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1886:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1895:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1898:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1888:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1888:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1888:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1874:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1882:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1871:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1871:14:37" - }, - "nodeType": "YulIf", - "src": "1868:34:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1952:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1961:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1964:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1954:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1954:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1954:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1925:2:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1929:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1921:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1921:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1938:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1917:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1917:24:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1943:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1914:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1914:37:37" - }, - "nodeType": "YulIf", - "src": "1911:57:37" - }, - { - "nodeType": "YulAssignment", - "src": "1977:21:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1991:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1995:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1987:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1987:11:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1977:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "2007:16:37", - "value": { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2017:6:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "2007:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1420:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1431:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1443:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1451:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "1459:6:37", - "type": "" - } - ], - "src": "1364:665:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2135:125:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2145:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2157:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2168:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2153:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2153:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2145:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2187:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2202:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2210:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2198:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2198:55:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2180:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2180:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2180:74:37" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2104:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2115:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2126:4:37", - "type": "" - } - ], - "src": "2034:226:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2364:149:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2374:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2386:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2397:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2382:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2382:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2374:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2416:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2431:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2439:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2427:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2427:79:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2409:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2409:98:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2409:98:37" - } - ] - }, - "name": "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2333:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2344:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2355:4:37", - "type": "" - } - ], - "src": "2265:248:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2596:199:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2642:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2651:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2654:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2644:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2644:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2644:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2617:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2626:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2613:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2613:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2638:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2609:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2609:32:37" - }, - "nodeType": "YulIf", - "src": "2606:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2667:29:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2686:9:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2680:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2680:16:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2671:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2749:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2758:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2761:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2751:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2751:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2751:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2718:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2739:5:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2732:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2732:13:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2725:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2725:21:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2715:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2715:32:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2708:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2708:40:37" - }, - "nodeType": "YulIf", - "src": "2705:60:37" - }, - { - "nodeType": "YulAssignment", - "src": "2774:15:37", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2784:5:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2774:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2562:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2573:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2585:6:37", - "type": "" - } - ], - "src": "2518:277:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2974:164:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2991:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3002:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2984:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2984:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2984:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3025:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3036:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3021:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3021:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3041:2:37", - "type": "", - "value": "14" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3014:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3014:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3014:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3064:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3075:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3060:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3060:18:37" - }, - { - "hexValue": "4e4f545f415554484f52495a4544", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3080:16:37", - "type": "", - "value": "NOT_AUTHORIZED" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3053:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3053:44:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3053:44:37" - }, - { - "nodeType": "YulAssignment", - "src": "3106:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3118:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3129:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3114:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3114:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3106:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2951:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2965:4:37", - "type": "" - } - ], - "src": "2800:338:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3280:289:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3290:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3310:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3304:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3304:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3294:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3326:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3335:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "3330:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3397:77:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3422:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3427:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3418:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3418:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3445:6:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3453:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3441:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3441:14:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3457:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3437:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3437:25:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3431:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3431:32:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3411:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3411:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3411:53:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3356:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3359:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3353:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3353:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "3367:21:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3369:17:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3378:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3381:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3374:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3374:12:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3369:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "3349:3:37", - "statements": [] - }, - "src": "3345:129:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3500:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3513:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3518:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3509:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3509:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3527:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3502:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3502:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3502:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3489:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3492:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3486:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3486:13:37" - }, - "nodeType": "YulIf", - "src": "3483:48:37" - }, - { - "nodeType": "YulAssignment", - "src": "3540:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3551:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3556:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3547:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3547:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3540:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3256:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3261:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3272:3:37", - "type": "" - } - ], - "src": "3143:426:37" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_stringliteral_ef8a4c3fcfbfa959f184421d0ef9a577b18116cafbc5879aff4e2f1881c7c1f0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 14)\n mstore(add(headStart, 64), \"ETHER_REJECTED\")\n tail := add(headStart, 96)\n }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_address(offset) -> value\n {\n let value_1 := calldataload(offset)\n if iszero(eq(value_1, and(value_1, 0xffffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value := and(value_1, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n value1 := add(_2, 32)\n value2 := length\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff00000000000000000000000000000000000000000000000000000000))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 14)\n mstore(add(headStart, 64), \"NOT_AUTHORIZED\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n let i := 0\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n }\n if gt(i, length) { mstore(add(pos, length), 0) }\n end := add(pos, length)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4F1EF286 GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x15D JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x170 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1C4 JUMPI PUSH2 0xCA JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xD4 JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x123 JUMPI PUSH2 0xCA JUMP JUMPDEST CALLDATASIZE PUSH2 0xCA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x45544845525F52454A4543544544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xD2 PUSH2 0x1FE JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0xED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0xFA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10E PUSH2 0x109 CALLDATASIZE PUSH1 0x4 PUSH2 0x86E JUMP JUMPDEST PUSH2 0x249 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x12F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x13C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x149 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x158 CALLDATASIZE PUSH1 0x4 PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x417 JUMP JUMPDEST PUSH2 0xD2 PUSH2 0x16B CALLDATASIZE PUSH1 0x4 PUSH2 0x90E JUMP JUMPDEST PUSH2 0x4E9 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x17C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x189 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x196 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19F PUSH2 0x5E4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x11A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x1EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD2 PUSH2 0x1F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x8F3 JUMP JUMPDEST PUSH2 0x613 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x0 CALLDATASIZE DUP2 DUP3 CALLDATACOPY DUP1 DUP2 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP4 RETURNDATACOPY DUP3 DUP1 ISZERO PUSH2 0x23F JUMPI DUP2 DUP4 RETURN JUMPDEST DUP2 DUP4 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ DUP1 PUSH2 0x2DC JUMPI POP PUSH32 0x7F5828D000000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST ISZERO PUSH2 0x2E9 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND EQ ISZERO PUSH2 0x31B JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x40 MLOAD PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x1FFC9A7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x403 JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x400 SWAP2 DUP2 ADD SWAP1 PUSH2 0x991 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x410 JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x4E6 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x6D2 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x59F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x5DF DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x6D2 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x60E PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x6C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0xC1 JUMP JUMPDEST PUSH2 0x4E6 DUP2 PUSH2 0x7C1 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH2 0x5DF JUMPI PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x76D SWAP2 SWAP1 PUSH2 0x9B3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x7A8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x7AD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x243 JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7EB PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x880 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x410 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x905 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x410 DUP3 PUSH2 0x8B0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x923 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x92C DUP5 PUSH2 0x8B0 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x949 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x95D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x96C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x97E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x410 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x9D4 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x9BA JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x9E3 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 POP 0x2B 0xBD CALLDATALOAD 0x21 0xF DELEGATECALL MSIZE 0x22 0xDB NATIVEFREEZEEXPIRETIME 0xC4 0xCD 0x2B DUP3 0x29 PUSH30 0xB50DFF9E1077C3D0476912D8EB5E1664736F6C634300080B003300000000 ", - "sourceMap": "236:3020:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;488:24:36;;;;;216:2:37;488:24:36;;;198:21:37;255:2;235:18;;;228:30;294:16;274:18;;;267:44;328:18;;488:24:36;;;;;;;;236:3020:32;593:11:36;:9;:11::i;:::-;236:3020:32;1018:877;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1018:877:32;;;;;:::i;:::-;;:::i;:::-;;;859:14:37;;852:22;834:41;;822:2;807:18;1018:877:32;;;;;;;;2007:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2007:123:32;;;;;:::i;:::-;;:::i;2136:161::-;;;;;;:::i;:::-;;:::i;931:81::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2210:42:37;2198:55;;;2180:74;;2168:2;2153:18;931:81:32;2034:226:37;1901:100:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1901:100:32;;;;;:::i;:::-;;:::i;731:640:36:-;894:66;888:73;992:3;997:14;992:3;;974:38;992:3;;997:14;992:3;1060:21;1053:5;1040:69;1025:84;;1135:16;1185:5;992:3;;1164:27;1211:7;1231:55;;;;1335:5;992:3;1325:16;1231:55;1266:5;992:3;1256:16;1204:151;;;;;731:640::o;1018:877:32:-;1079:4;1099:16;;;;;;:36;;-1:-1:-1;1119:16:32;;;;;1099:36;1095:78;;;-1:-1:-1;1158:4:32;;1018:877;-1:-1:-1;1018:877:32:o;1095:78::-;1186:16;;;;;1182:59;;;-1:-1:-1;1225:5:32;;1018:877;-1:-1:-1;1018:877:32:o;1182:59::-;1394:66;1388:73;1746:36;;;;;2439:66:37;2427:79;;1746:36:32;;;2409:98:37;1746:32:32;;;;;;2382:18:37;;1746:36:32;;;;;;;;;;;;;;;;;;-1:-1:-1;1746:36:32;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1742:147;;-1:-1:-1;1873:5:32;;1018:877;-1:-1:-1;;1018:877:32:o;1742:147::-;1827:7;1018:877;-1:-1:-1;;;1018:877:32:o;2007:123::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;3002:2:37;2449:49:32;;;2984:21:37;3041:2;3021:18;;;3014:30;3080:16;3060:18;;;3053:44;3114:18;;2449:49:32;2800:338:37;2449:49:32;2082:41:::1;2101:17;2082:41;;;;;;;;;;;::::0;:18:::1;:41::i;:::-;2007:123:::0;:::o;2136:161::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;3002:2:37;2449:49:32;;;2984:21:37;3041:2;3021:18;;;3014:30;3080:16;3060:18;;;3053:44;3114:18;;2449:49:32;2800:338:37;2449:49:32;2247:43:::1;2266:17;2285:4;;2247:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2247:18:32::1;::::0;-1:-1:-1;;;2247:43:32:i:1;:::-;2136:161:::0;;;:::o;931:81::-;971:7;997:8;2819:66;2813:73;;2636:266;997:8;990:15;;931:81;:::o;1901:100::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;3002:2:37;2449:49:32;;;2984:21:37;3041:2;3021:18;;;3014:30;3080:16;3060:18;;;3053:44;3114:18;;2449:49:32;2800:338:37;2449:49:32;1975:19:::1;1985:8;1975:9;:19::i;1377:1068:36:-:0;1630:66;1624:73;;1805:93;;;;1923:69;;;;;;;;;;;;;1470:30;;1923:69;2007:11;;:15;2003:436;;2039:12;2057:17;:30;;2088:4;2057:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:55;;;2112:7;2107:322;;2278:16;2336:14;2333:1;;2315:36;2382:14;2333:1;2372:25;2908:346:32;2964:21;2988:8;2819:66;2813:73;;2636:266;2988:8;2964:32;;3169:8;3101:66;3094:84;3238:8;3202:45;;3223:13;3202:45;;;;;;;;;;;;2954:300;2908:346;:::o;357:332:37:-;415:6;468:2;456:9;447:7;443:23;439:32;436:52;;;484:1;481;474:12;436:52;523:9;510:23;573:66;566:5;562:78;555:5;552:89;542:117;;655:1;652;645:12;886:282;925:5;973:6;960:20;1024:44;1015:7;1011:58;1002:7;999:71;989:99;;1084:1;1081;1074:12;989:99;1119:42;1106:56;;886:282;-1:-1:-1;;886:282:37:o;1173:186::-;1232:6;1285:2;1273:9;1264:7;1260:23;1256:32;1253:52;;;1301:1;1298;1291:12;1253:52;1324:29;1343:9;1324:29;:::i;1364:665::-;1443:6;1451;1459;1512:2;1500:9;1491:7;1487:23;1483:32;1480:52;;;1528:1;1525;1518:12;1480:52;1551:29;1570:9;1551:29;:::i;:::-;1541:39;;1631:2;1620:9;1616:18;1603:32;1654:18;1695:2;1687:6;1684:14;1681:34;;;1711:1;1708;1701:12;1681:34;1749:6;1738:9;1734:22;1724:32;;1794:7;1787:4;1783:2;1779:13;1775:27;1765:55;;1816:1;1813;1806:12;1765:55;1856:2;1843:16;1882:2;1874:6;1871:14;1868:34;;;1898:1;1895;1888:12;1868:34;1943:7;1938:2;1929:6;1925:2;1921:15;1917:24;1914:37;1911:57;;;1964:1;1961;1954:12;1911:57;1995:2;1991;1987:11;1977:21;;2017:6;2007:16;;;;;1364:665;;;;;:::o;2518:277::-;2585:6;2638:2;2626:9;2617:7;2613:23;2609:32;2606:52;;;2654:1;2651;2644:12;2606:52;2686:9;2680:16;2739:5;2732:13;2725:21;2718:5;2715:32;2705:60;;2761:1;2758;2751:12;3143:426;3272:3;3310:6;3304:13;3335:1;3345:129;3359:6;3356:1;3353:13;3345:129;;;3457:4;3441:14;;;3437:25;;3431:32;3418:11;;;3411:53;3374:12;3345:129;;;3492:6;3489:1;3486:13;3483:48;;;3527:1;3518:6;3513:3;3509:16;3502:27;3483:48;-1:-1:-1;3547:16:37;;;;;3143:426;-1:-1:-1;;3143:426:37:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "519200", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite", - "owner()": "2409", - "supportsInterface(bytes4)": "infinite", - "transferOwnership(address)": "28337", - "upgradeTo(address)": "28365", - "upgradeToAndCall(address,bytes)": "infinite" - }, - "internal": { - "_owner()": "infinite", - "_setOwner(address)": "25799" - } - }, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "supportsInterface(bytes4)": "01ffc9a7", - "transferOwnership(address)": "f2fde38b", - "upgradeTo(address)": "3659cfe6", - "upgradeToAndCall(address,bytes)": "4f1ef286" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"ownerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousImplementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ProxyImplementationUpdated\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"id\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Proxy implementing EIP173 for ownership management\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/EIP173Proxy.sol\":\"EIP173Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/proxy/EIP173Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xa52a027d9e3ad599c98da343572c0f8e16d65551d6fa0ab218e9e2d0f76e2ab0\",\"license\":\"MIT\"},\"solc_0.8/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x68c8cf1a340a53d31de8ed808bb66d64e83d50b20d80a0b2dff6aba903cebc98\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Proxy implementing EIP173 for ownership management", - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/EIP173ProxyWithReceive.json b/extendedArtifactsTron/EIP173ProxyWithReceive.json deleted file mode 100644 index f15f83b..0000000 --- a/extendedArtifactsTron/EIP173ProxyWithReceive.json +++ /dev/null @@ -1,4524 +0,0 @@ -{ - "contractName": "EIP173ProxyWithReceive", - "sourceName": "solc_0.8/proxy/EIP173ProxyWithReceive.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "implementationAddress", - "type": "address" - }, - { - "internalType": "address", - "name": "ownerAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ProxyImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "id", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405260405162000d0138038062000d0183398101604081905262000026916200020f565b82828262000034826200004c565b620000408382620000be565b5050505050506200030d565b60006200006660008051602062000ce18339815191525490565b90508160008051602062000ce183398151915255816001600160a01b0316816001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8054908390556040516001600160a01b0380851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a38151156200019b576000836001600160a01b031683604051620001429190620002ef565b600060405180830381855af49150503d80600081146200017f576040519150601f19603f3d011682016040523d82523d6000602084013e62000184565b606091505b505090508062000199573d806000803e806000fd5b505b505050565b80516000906001600160a81b0381168114620001bb57600080fd5b6001600160a01b031692915050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620001fd578181015183820152602001620001e3565b83811115620001995750506000910152565b6000806000606084860312156200022557600080fd5b6200023084620001a0565b92506200024060208501620001a0565b60408501519092506001600160401b03808211156200025e57600080fd5b818601915086601f8301126200027357600080fd5b815181811115620002885762000288620001ca565b604051601f8201601f19908116603f01168101908382118183101715620002b357620002b3620001ca565b81604052828152896020848701011115620002cd57600080fd5b620002e0836020830160208801620001e0565b80955050505050509250925092565b6000825162000303818460208701620001e0565b9190910192915050565b6109c4806200031d6000396000f3fe60806040526004361061005e5760003560e01c80634f1ef286116100435780634f1ef286146100f85780638da5cb5b1461010b578063f2fde38b1461015f57610065565b806301ffc9a71461006f5780633659cfe6146100be57610065565b3661006557005b61006d610199565b005b34801561007b57600080fd5b50d3801561008857600080fd5b50d2801561009557600080fd5b506100a96100a436600461080e565b6101e4565b60405190151581526020015b60405180910390f35b3480156100ca57600080fd5b50d380156100d757600080fd5b50d280156100e457600080fd5b5061006d6100f3366004610893565b6103b2565b61006d6101063660046108ae565b610489565b34801561011757600080fd5b50d3801561012457600080fd5b50d2801561013157600080fd5b5061013a610584565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561016b57600080fd5b50d3801561017857600080fd5b50d2801561018557600080fd5b5061006d610194366004610893565b6105b3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460003681823780813683855af491503d8082833e8280156101da578183f35b8183fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061027757507f7f5828d0000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b1561028457506001919050565b7fffffffff0000000000000000000000000000000000000000000000000000000080831614156102b657506000919050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008416600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa92505050801561039e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261039b91810190610931565b60015b6103ab5750600092915050565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461046d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b6104868160405180602001604052806000815250610672565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461053f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610464565b61057f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061067292505050565b505050565b60006105ae7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905090565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610464565b61048681610761565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80549083905560405173ffffffffffffffffffffffffffffffffffffffff80851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a381511561057f5760008373ffffffffffffffffffffffffffffffffffffffff168360405161070d9190610953565b600060405180830381855af49150503d8060008114610748576040519150601f19603f3d011682016040523d82523d6000602084013e61074d565b606091505b50509050806101de573d806000803e806000fd5b600061078b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b9050817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006020828403121561082057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146103ab57600080fd5b6000813574ffffffffffffffffffffffffffffffffffffffffff8116811461087757600080fd5b73ffffffffffffffffffffffffffffffffffffffff1692915050565b6000602082840312156108a557600080fd5b6103ab82610850565b6000806000604084860312156108c357600080fd5b6108cc84610850565b9250602084013567ffffffffffffffff808211156108e957600080fd5b818601915086601f8301126108fd57600080fd5b81358181111561090c57600080fd5b87602082850101111561091e57600080fd5b6020830194508093505050509250925092565b60006020828403121561094357600080fd5b815180151581146103ab57600080fd5b6000825160005b81811015610974576020818601810151858301520161095a565b81811115610983576000828501525b50919091019291505056fea26474726f6e58221220dfe885dea325f0c9d8df3d50adb2badea6f416b5f80760f7fca70961ca90450e64736f6c634300080b0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103", - "deployedBytecode": "0x60806040526004361061005e5760003560e01c80634f1ef286116100435780634f1ef286146100f85780638da5cb5b1461010b578063f2fde38b1461015f57610065565b806301ffc9a71461006f5780633659cfe6146100be57610065565b3661006557005b61006d610199565b005b34801561007b57600080fd5b50d3801561008857600080fd5b50d2801561009557600080fd5b506100a96100a436600461080e565b6101e4565b60405190151581526020015b60405180910390f35b3480156100ca57600080fd5b50d380156100d757600080fd5b50d280156100e457600080fd5b5061006d6100f3366004610893565b6103b2565b61006d6101063660046108ae565b610489565b34801561011757600080fd5b50d3801561012457600080fd5b50d2801561013157600080fd5b5061013a610584565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561016b57600080fd5b50d3801561017857600080fd5b50d2801561018557600080fd5b5061006d610194366004610893565b6105b3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5460003681823780813683855af491503d8082833e8280156101da578183f35b8183fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061027757507f7f5828d0000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b1561028457506001919050565b7fffffffff0000000000000000000000000000000000000000000000000000000080831614156102b657506000919050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008416600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa92505050801561039e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261039b91810190610931565b60015b6103ab5750600092915050565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461046d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b6104868160405180602001604052806000815250610672565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461053f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610464565b61057f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061067292505050565b505050565b60006105ae7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905090565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610464565b61048681610761565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80549083905560405173ffffffffffffffffffffffffffffffffffffffff80851691908316907f5570d70a002632a7b0b3c9304cc89efb62d8da9eca0dbd7752c83b737906829690600090a381511561057f5760008373ffffffffffffffffffffffffffffffffffffffff168360405161070d9190610953565b600060405180830381855af49150503d8060008114610748576040519150601f19603f3d011682016040523d82523d6000602084013e61074d565b606091505b50509050806101de573d806000803e806000fd5b600061078b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b9050817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103558173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006020828403121561082057600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146103ab57600080fd5b6000813574ffffffffffffffffffffffffffffffffffffffffff8116811461087757600080fd5b73ffffffffffffffffffffffffffffffffffffffff1692915050565b6000602082840312156108a557600080fd5b6103ab82610850565b6000806000604084860312156108c357600080fd5b6108cc84610850565b9250602084013567ffffffffffffffff808211156108e957600080fd5b818601915086601f8301126108fd57600080fd5b81358181111561090c57600080fd5b87602082850101111561091e57600080fd5b6020830194508093505050509250925092565b60006020828403121561094357600080fd5b815180151581146103ab57600080fd5b6000825160005b81811015610974576020818601810151858301520161095a565b81811115610983576000828501525b50919091019291505056fea26474726f6e58221220dfe885dea325f0c9d8df3d50adb2badea6f416b5f80760f7fca70961ca90450e64736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_3586": { - "entryPoint": null, - "id": 3586, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_3741": { - "entryPoint": null, - "id": 3741, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_owner_3702": { - "entryPoint": null, - "id": 3702, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_4036": { - "entryPoint": 190, - "id": 4036, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setOwner_3719": { - "entryPoint": 76, - "id": 3719, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 416, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 527, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 751, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 480, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 458, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1986:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:178:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "84:28:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "105:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "99:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "99:13:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "88:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "179:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "188:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "191:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "181:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "181:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "181:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "134:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "147:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "164:3:37", - "type": "", - "value": "168" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "169:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "160:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "160:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "173:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "156:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "156:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "143:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "143:33:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "131:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "131:46:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "124:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "124:54:37" - }, - "nodeType": "YulIf", - "src": "121:74:37" - }, - { - "nodeType": "YulAssignment", - "src": "204:42:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "217:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "234:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "239:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "230:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "230:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "226:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "226:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "213:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "213:33:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "204:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:37", - "type": "" - } - ], - "src": "14:238:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "289:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "306:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "313:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "318:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "309:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "309:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "299:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "299:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "299:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "346:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "349:4:37", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "339:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "339:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "339:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "370:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "373:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "363:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "363:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "363:15:37" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "257:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "442:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "452:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "461:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "456:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "521:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "546:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "551:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "542:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "542:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "565:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "570:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "561:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "561:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "555:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "555:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "535:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "535:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "535:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "482:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "485:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "479:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "479:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "493:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "495:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "504:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "507:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "500:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "500:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "495:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "475:3:37", - "statements": [] - }, - "src": "471:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "623:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "628:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "619:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "619:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "637:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "612:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "612:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "612:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "599:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "602:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "596:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "596:13:37" - }, - "nodeType": "YulIf", - "src": "593:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "420:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "425:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "430:6:37", - "type": "" - } - ], - "src": "389:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "776:929:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "822:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "831:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "834:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "824:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "824:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "824:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "797:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "806:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "793:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "793:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "818:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "789:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "789:32:37" - }, - "nodeType": "YulIf", - "src": "786:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "847:50:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "887:9:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "857:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "857:40:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "847:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "906:59:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "950:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "961:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "946:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "946:18:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "916:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "916:49:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "906:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "974:39:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "998:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1009:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "994:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "994:18:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "988:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "988:25:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "978:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1022:28:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1040:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1044:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1036:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1036:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1048:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1032:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1032:18:37" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1026:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1077:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1086:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1089:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1079:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1079:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1079:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1065:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1073:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1062:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1062:14:37" - }, - "nodeType": "YulIf", - "src": "1059:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1102:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1116:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1127:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1112:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1112:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1106:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1182:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1191:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1194:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1184:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1184:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1184:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1161:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1165:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1157:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1157:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1172:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1153:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1153:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1146:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1146:35:37" - }, - "nodeType": "YulIf", - "src": "1143:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1207:19:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1223:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1217:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1217:9:37" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1211:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1249:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1251:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1251:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1251:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1241:2:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1245:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1238:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1238:10:37" - }, - "nodeType": "YulIf", - "src": "1235:36:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1280:17:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1294:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1290:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1290:7:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1284:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1306:23:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1326:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1320:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1320:9:37" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1310:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1338:71:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1360:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1384:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1388:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1380:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1380:13:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1395:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1376:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1376:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1400:2:37", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1372:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1372:31:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1405:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1368:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1368:40:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1356:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1356:53:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1342:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1468:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1470:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1470:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1470:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1427:10:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1439:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1424:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1424:18:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1447:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1459:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1444:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1444:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1421:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1421:46:37" - }, - "nodeType": "YulIf", - "src": "1418:72:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1506:2:37", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1510:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1499:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1499:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1499:22:37" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1537:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1545:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1530:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1530:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1530:18:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1594:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1603:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1606:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1596:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1596:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1596:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1571:2:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1575:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1567:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1567:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1580:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1563:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1563:20:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1585:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1560:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1560:33:37" - }, - "nodeType": "YulIf", - "src": "1557:53:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1645:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1649:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1641:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1641:11:37" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1658:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1666:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1654:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1654:15:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1671:2:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1619:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "1619:55:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1619:55:37" - }, - { - "nodeType": "YulAssignment", - "src": "1683:16:37", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1693:6:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1683:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "726:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "737:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "749:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "757:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "765:6:37", - "type": "" - } - ], - "src": "652:1053:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1847:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1857:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1877:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1871:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1871:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1861:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1919:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1927:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1915:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1915:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1934:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1939:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1893:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "1893:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1893:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "1955:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1966:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1971:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1962:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1962:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "1955:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1823:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1828:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "1839:3:37", - "type": "" - } - ], - "src": "1710:274:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n let value_1 := mload(offset)\n if iszero(eq(value_1, and(value_1, sub(shl(168, 1), 1)))) { revert(0, 0) }\n value := and(value_1, sub(shl(160, 1), 1))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n let offset := mload(add(headStart, 64))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value2 := memPtr\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xD01 CODESIZE SUB DUP1 PUSH3 0xD01 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x20F JUMP JUMPDEST DUP3 DUP3 DUP3 PUSH3 0x34 DUP3 PUSH3 0x4C JUMP JUMPDEST PUSH3 0x40 DUP4 DUP3 PUSH3 0xBE JUMP JUMPDEST POP POP POP POP POP POP PUSH3 0x30D JUMP JUMPDEST PUSH1 0x0 PUSH3 0x66 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xCE1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xCE1 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE SSTORE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH3 0x19B JUMPI PUSH1 0x0 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x40 MLOAD PUSH3 0x142 SWAP2 SWAP1 PUSH3 0x2EF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x17F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x184 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH3 0x199 JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x1FD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x1E3 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x199 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x225 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x230 DUP5 PUSH3 0x1A0 JUMP JUMPDEST SWAP3 POP PUSH3 0x240 PUSH1 0x20 DUP6 ADD PUSH3 0x1A0 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x25E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x273 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x288 JUMPI PUSH3 0x288 PUSH3 0x1CA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x2B3 JUMPI PUSH3 0x2B3 PUSH3 0x1CA JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x2E0 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x1E0 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x303 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x1E0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x9C4 DUP1 PUSH3 0x31D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4F1EF286 GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0xF8 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x10B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x15F JUMPI PUSH2 0x65 JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0xBE JUMPI PUSH2 0x65 JUMP JUMPDEST CALLDATASIZE PUSH2 0x65 JUMPI STOP JUMPDEST PUSH2 0x6D PUSH2 0x199 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA9 PUSH2 0xA4 CALLDATASIZE PUSH1 0x4 PUSH2 0x80E JUMP JUMPDEST PUSH2 0x1E4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0xD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0xE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D PUSH2 0xF3 CALLDATASIZE PUSH1 0x4 PUSH2 0x893 JUMP JUMPDEST PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x6D PUSH2 0x106 CALLDATASIZE PUSH1 0x4 PUSH2 0x8AE JUMP JUMPDEST PUSH2 0x489 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13A PUSH2 0x584 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D PUSH2 0x194 CALLDATASIZE PUSH1 0x4 PUSH2 0x893 JUMP JUMPDEST PUSH2 0x5B3 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x0 CALLDATASIZE DUP2 DUP3 CALLDATACOPY DUP1 DUP2 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP4 RETURNDATACOPY DUP3 DUP1 ISZERO PUSH2 0x1DA JUMPI DUP2 DUP4 RETURN JUMPDEST DUP2 DUP4 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ DUP1 PUSH2 0x277 JUMPI POP PUSH32 0x7F5828D000000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST ISZERO PUSH2 0x284 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND EQ ISZERO PUSH2 0x2B6 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x40 MLOAD PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x1FFC9A7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x39E JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x39B SWAP2 DUP2 ADD SWAP1 PUSH2 0x931 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x3AB JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x46D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x486 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x672 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x53F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x464 JUMP JUMPDEST PUSH2 0x57F DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x672 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5AE PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x669 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x464 JUMP JUMPDEST PUSH2 0x486 DUP2 PUSH2 0x761 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x70D SWAP2 SWAP1 PUSH2 0x953 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x748 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x74D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x1DE JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x78B PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x820 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x877 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3AB DUP3 PUSH2 0x850 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8CC DUP5 PUSH2 0x850 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x8E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x90C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x91E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x943 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x974 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x95A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x983 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 0xDF 0xE8 DUP6 0xDE LOG3 0x25 CREATE 0xC9 NATIVEVOTE 0xDF RETURNDATASIZE POP 0xAD 0xB2 0xBA 0xDE 0xA6 DELEGATECALL AND 0xB5 0xF8 SMOD PUSH1 0xF7 0xFC 0xA7 MULMOD PUSH2 0xCA90 GASLIMIT 0xE PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER 0xB5 BALANCE 0x27 PUSH9 0x4A568B3173AE13B9F8 0xA6 ADD PUSH15 0x243E63B6E8EE1178D6A717850B5D61 SUB ", - "sourceMap": "176:278:33:-:0;;;229:179;;;;;;;;;;;;;;;;;;:::i;:::-;363:21;386:12;400:4;723:23:32;386:12:33;723:9:32;:23::i;:::-;756:47;775:21;798:4;756:18;:47::i;:::-;591:219;;;229:179:33;;;176:278;;2908:346:32;2964:21;2988:8;-1:-1:-1;;;;;;;;;;;2813:73:32;;2636:266;2988:8;2964:32;;3169:8;-1:-1:-1;;;;;;;;;;;3094:84:32;3238:8;-1:-1:-1;;;;;3202:45:32;3223:13;-1:-1:-1;;;;;3202:45:32;;;;;;;;;;;2954:300;2908:346;:::o;1377:1068:36:-;1630:66;1624:73;;1805:93;;;;1923:69;;-1:-1:-1;;;;;1923:69:36;;;;;;;;;;1470:30;;1923:69;2007:11;;:15;2003:436;;2039:12;2057:17;-1:-1:-1;;;;;2057:30:36;2088:4;2057:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:55;;;2112:7;2107:322;;2278:16;2336:14;2333:1;;2315:36;2382:14;2333:1;2372:25;2107:322;2024:415;2003:436;1460:985;1377:1068;;:::o;14:238:37:-;99:13;;64:5;;-1:-1:-1;;;;;143:33:37;;131:46;;121:74;;191:1;188;181:12;121:74;-1:-1:-1;;;;;213:33:37;;14:238;-1:-1:-1;;14:238:37:o;257:127::-;318:10;313:3;309:20;306:1;299:31;349:4;346:1;339:15;373:4;370:1;363:15;389:258;461:1;471:113;485:6;482:1;479:13;471:113;;;561:11;;;555:18;542:11;;;535:39;507:2;500:10;471:113;;;602:6;599:1;596:13;593:48;;;-1:-1:-1;;637:1:37;619:16;;612:27;389:258::o;652:1053::-;749:6;757;765;818:2;806:9;797:7;793:23;789:32;786:52;;;834:1;831;824:12;786:52;857:40;887:9;857:40;:::i;:::-;847:50;;916:49;961:2;950:9;946:18;916:49;:::i;:::-;1009:2;994:18;;988:25;906:59;;-1:-1:-1;;;;;;1062:14:37;;;1059:34;;;1089:1;1086;1079:12;1059:34;1127:6;1116:9;1112:22;1102:32;;1172:7;1165:4;1161:2;1157:13;1153:27;1143:55;;1194:1;1191;1184:12;1143:55;1223:2;1217:9;1245:2;1241;1238:10;1235:36;;;1251:18;;:::i;:::-;1326:2;1320:9;1294:2;1380:13;;-1:-1:-1;;1376:22:37;;;1400:2;1372:31;1368:40;1356:53;;;1424:18;;;1444:22;;;1421:46;1418:72;;;1470:18;;:::i;:::-;1510:10;1506:2;1499:22;1545:2;1537:6;1530:18;1585:7;1580:2;1575;1571;1567:11;1563:20;1560:33;1557:53;;;1606:1;1603;1596:12;1557:53;1619:55;1671:2;1666;1658:6;1654:15;1649:2;1645;1641:11;1619:55;:::i;:::-;1693:6;1683:16;;;;;;;652:1053;;;;;:::o;1710:274::-;1839:3;1877:6;1871:13;1893:53;1939:6;1934:3;1927:4;1919:6;1915:17;1893:53;:::i;:::-;1962:16;;;;;1710:274;-1:-1:-1;;1710:274:37:o;:::-;176:278:33;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_3746": { - "entryPoint": null, - "id": 3746, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_3995": { - "entryPoint": null, - "id": 3995, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_fallback_4000": { - "entryPoint": 409, - "id": 4000, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_owner_3702": { - "entryPoint": null, - "id": 3702, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_4036": { - "entryPoint": 1650, - "id": 4036, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setOwner_3719": { - "entryPoint": 1889, - "id": 3719, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@owner_3595": { - "entryPoint": 1412, - "id": 3595, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@supportsInterface_3642": { - "entryPoint": 484, - "id": 3642, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@transferOwnership_3654": { - "entryPoint": 1459, - "id": 3654, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@upgradeToAndCall_3682": { - "entryPoint": 1161, - "id": 3682, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@upgradeTo_3667": { - "entryPoint": 946, - "id": 3667, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_address": { - "entryPoint": 2128, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 2195, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_calldata_ptr": { - "entryPoint": 2222, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 2353, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes4": { - "entryPoint": 2062, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 2387, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3228:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "83:263:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "129:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "138:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "141:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "131:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "131:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "131:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "104:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "113:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "100:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "100:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "125:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "96:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "96:32:37" - }, - "nodeType": "YulIf", - "src": "93:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "154:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "180:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "167:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "167:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "158:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "300:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "309:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "302:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "302:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "302:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "212:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "223:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "230:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "219:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "219:78:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "209:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "209:89:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "202:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "202:97:37" - }, - "nodeType": "YulIf", - "src": "199:117:37" - }, - { - "nodeType": "YulAssignment", - "src": "325:15:37", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "335:5:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "325:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes4", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "49:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "60:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "72:6:37", - "type": "" - } - ], - "src": "14:332:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "446:92:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "456:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "468:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "479:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "464:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "464:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "456:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "498:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "523:6:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "516:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "516:14:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "509:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "509:22:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "491:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "491:41:37" - }, - "nodeType": "YulExpressionStatement", - "src": "491:41:37" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "415:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "426:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "437:4:37", - "type": "" - } - ], - "src": "351:187:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "592:233:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "602:35:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "630:6:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "617:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "617:20:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "606:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "729:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "738:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "741:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "731:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "731:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "731:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "659:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "672:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "681:44:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "668:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "668:58:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "656:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "656:71:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "649:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "649:79:37" - }, - "nodeType": "YulIf", - "src": "646:99:37" - }, - { - "nodeType": "YulAssignment", - "src": "754:65:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "767:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "776:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "763:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "763:56:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "754:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "571:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "582:5:37", - "type": "" - } - ], - "src": "543:282:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "900:116:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "946:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "955:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "958:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "948:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "948:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "948:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "921:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "930:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "917:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "917:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "942:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "913:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "913:32:37" - }, - "nodeType": "YulIf", - "src": "910:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "971:39:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1000:9:37" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "981:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "981:29:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "971:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "866:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "877:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "889:6:37", - "type": "" - } - ], - "src": "830:186:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1127:559:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1173:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1182:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1185:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1175:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1175:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1175:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1148:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1157:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1144:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1144:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1169:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1140:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1140:32:37" - }, - "nodeType": "YulIf", - "src": "1137:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "1198:39:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1227:9:37" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "1208:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "1208:29:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1198:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1246:46:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1277:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1288:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1273:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1273:18:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1260:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "1260:32:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1250:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1301:28:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1311:18:37", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1305:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1356:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1365:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1368:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1358:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1358:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1358:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1344:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1352:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1341:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1341:14:37" - }, - "nodeType": "YulIf", - "src": "1338:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1381:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1395:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1406:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1391:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1391:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1385:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1461:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1470:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1473:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1463:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1463:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1463:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1440:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1444:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1436:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1436:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1451:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1432:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1432:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1425:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1425:35:37" - }, - "nodeType": "YulIf", - "src": "1422:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1486:30:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1513:2:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1500:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "1500:16:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1490:6:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1543:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1552:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1555:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1545:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1545:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1545:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1531:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1539:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1528:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1528:14:37" - }, - "nodeType": "YulIf", - "src": "1525:34:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1609:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1618:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1621:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1611:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1611:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1611:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1582:2:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1586:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1578:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1578:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1595:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1574:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1574:24:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1600:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1571:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1571:37:37" - }, - "nodeType": "YulIf", - "src": "1568:57:37" - }, - { - "nodeType": "YulAssignment", - "src": "1634:21:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1648:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1652:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1644:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1644:11:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1634:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1664:16:37", - "value": { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1674:6:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1664:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1077:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1088:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1100:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1108:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "1116:6:37", - "type": "" - } - ], - "src": "1021:665:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1792:125:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1802:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1814:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1825:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1810:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1810:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1802:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1844:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1859:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1867:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1855:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1855:55:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1837:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1837:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1837:74:37" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1761:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1772:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1783:4:37", - "type": "" - } - ], - "src": "1691:226:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2021:149:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2031:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2043:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2054:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2039:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2039:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2031:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2073:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2088:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2096:66:37", - "type": "", - "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2084:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2084:79:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2066:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2066:98:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2066:98:37" - } - ] - }, - "name": "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1990:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2001:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2012:4:37", - "type": "" - } - ], - "src": "1922:248:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2253:199:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2299:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2308:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2311:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2301:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2301:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2301:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2274:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2283:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2270:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2270:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2295:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2266:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2266:32:37" - }, - "nodeType": "YulIf", - "src": "2263:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2324:29:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2343:9:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2337:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2337:16:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2328:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2406:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2415:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2418:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2408:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2408:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2408:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2375:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2396:5:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2389:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2389:13:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2382:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2382:21:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2372:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2372:32:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2365:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2365:40:37" - }, - "nodeType": "YulIf", - "src": "2362:60:37" - }, - { - "nodeType": "YulAssignment", - "src": "2431:15:37", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2441:5:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2431:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2219:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2230:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2242:6:37", - "type": "" - } - ], - "src": "2175:277:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2631:164:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2648:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2659:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2641:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2641:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2641:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2682:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2693:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2678:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2678:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2698:2:37", - "type": "", - "value": "14" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2671:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2671:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2671:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2721:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2732:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2717:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2717:18:37" - }, - { - "hexValue": "4e4f545f415554484f52495a4544", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2737:16:37", - "type": "", - "value": "NOT_AUTHORIZED" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2710:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2710:44:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2710:44:37" - }, - { - "nodeType": "YulAssignment", - "src": "2763:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2775:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2786:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2771:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2771:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2763:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2608:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2622:4:37", - "type": "" - } - ], - "src": "2457:338:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2937:289:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2947:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2967:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2961:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2961:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2951:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2983:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2992:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2987:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3054:77:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3079:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3084:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3075:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3075:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3102:6:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3110:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3098:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3098:14:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3114:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3094:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3094:25:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3088:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3088:32:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3068:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3068:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3068:53:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3013:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3016:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3010:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3010:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "3024:21:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3026:17:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3035:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3038:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3031:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3031:12:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3026:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "3006:3:37", - "statements": [] - }, - "src": "3002:129:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3157:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3170:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3175:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3166:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3166:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3184:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3159:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3159:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3159:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3146:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3149:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3143:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "3143:13:37" - }, - "nodeType": "YulIf", - "src": "3140:48:37" - }, - { - "nodeType": "YulAssignment", - "src": "3197:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3208:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3213:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3204:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3204:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3197:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2913:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2918:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2929:3:37", - "type": "" - } - ], - "src": "2800:426:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_address(offset) -> value\n {\n let value_1 := calldataload(offset)\n if iszero(eq(value_1, and(value_1, 0xffffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value := and(value_1, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n value1 := add(_2, 32)\n value2 := length\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff00000000000000000000000000000000000000000000000000000000))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_e7e213d5e2bee0acc2c7bf8bfda19ef0cae82e7b8c997e7e898919269971e7c4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 14)\n mstore(add(headStart, 64), \"NOT_AUTHORIZED\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n let i := 0\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n mstore(add(pos, i), mload(add(add(value0, i), 0x20)))\n }\n if gt(i, length) { mstore(add(pos, length), 0) }\n end := add(pos, length)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4F1EF286 GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0xF8 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x10B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x15F JUMPI PUSH2 0x65 JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x6F JUMPI DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0xBE JUMPI PUSH2 0x65 JUMP JUMPDEST CALLDATASIZE PUSH2 0x65 JUMPI STOP JUMPDEST PUSH2 0x6D PUSH2 0x199 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x95 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA9 PUSH2 0xA4 CALLDATASIZE PUSH1 0x4 PUSH2 0x80E JUMP JUMPDEST PUSH2 0x1E4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0xD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0xE4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D PUSH2 0xF3 CALLDATASIZE PUSH1 0x4 PUSH2 0x893 JUMP JUMPDEST PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x6D PUSH2 0x106 CALLDATASIZE PUSH1 0x4 PUSH2 0x8AE JUMP JUMPDEST PUSH2 0x489 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x117 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13A PUSH2 0x584 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x16B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x178 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6D PUSH2 0x194 CALLDATASIZE PUSH1 0x4 PUSH2 0x893 JUMP JUMPDEST PUSH2 0x5B3 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x0 CALLDATASIZE DUP2 DUP3 CALLDATACOPY DUP1 DUP2 CALLDATASIZE DUP4 DUP6 GAS DELEGATECALL SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP4 RETURNDATACOPY DUP3 DUP1 ISZERO PUSH2 0x1DA JUMPI DUP2 DUP4 RETURN JUMPDEST DUP2 DUP4 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ DUP1 PUSH2 0x277 JUMPI POP PUSH32 0x7F5828D000000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST ISZERO PUSH2 0x284 JUMPI POP PUSH1 0x1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP1 DUP4 AND EQ ISZERO PUSH2 0x2B6 JUMPI POP PUSH1 0x0 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH1 0x40 MLOAD PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH4 0x1FFC9A7 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x39E JUMPI POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND DUP3 ADD SWAP1 SWAP3 MSTORE PUSH2 0x39B SWAP2 DUP2 ADD SWAP1 PUSH2 0x931 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH2 0x3AB JUMPI POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x46D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x486 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x672 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x53F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x464 JUMP JUMPDEST PUSH2 0x57F DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x672 SWAP3 POP POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5AE PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x669 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F415554484F52495A4544000000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x464 JUMP JUMPDEST PUSH2 0x486 DUP2 PUSH2 0x761 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD SWAP1 DUP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND SWAP2 SWAP1 DUP4 AND SWAP1 PUSH32 0x5570D70A002632A7B0B3C9304CC89EFB62D8DA9ECA0DBD7752C83B7379068296 SWAP1 PUSH1 0x0 SWAP1 LOG3 DUP2 MLOAD ISZERO PUSH2 0x57F JUMPI PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x70D SWAP2 SWAP1 PUSH2 0x953 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x748 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x74D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH2 0x1DE JUMPI RETURNDATASIZE DUP1 PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x78B PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SLOAD SWAP1 JUMP JUMPDEST SWAP1 POP DUP2 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 SSTORE DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x820 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x877 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3AB DUP3 PUSH2 0x850 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x8C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8CC DUP5 PUSH2 0x850 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x8E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x90C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x91E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x943 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x974 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x95A JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x983 JUMPI PUSH1 0x0 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 0xDF 0xE8 DUP6 0xDE LOG3 0x25 CREATE 0xC9 NATIVEVOTE 0xDF RETURNDATASIZE POP 0xAD 0xB2 0xBA 0xDE 0xA6 DELEGATECALL AND 0xB5 0xF8 SMOD PUSH1 0xF7 0xFC 0xA7 MULMOD PUSH2 0xCA90 GASLIMIT 0xE PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", - "sourceMap": "176:278:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;593:11:36;:9;:11::i;:::-;176:278:33;1018:877:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1018:877:32;;;;;:::i;:::-;;:::i;:::-;;;516:14:37;;509:22;491:41;;479:2;464:18;1018:877:32;;;;;;;;2007:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2007:123:32;;;;;:::i;:::-;;:::i;2136:161::-;;;;;;:::i;:::-;;:::i;931:81::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1867:42:37;1855:55;;;1837:74;;1825:2;1810:18;931:81:32;1691:226:37;1901:100:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1901:100:32;;;;;:::i;:::-;;:::i;731:640:36:-;894:66;888:73;992:3;997:14;992:3;;974:38;992:3;;997:14;992:3;1060:21;1053:5;1040:69;1025:84;;1135:16;1185:5;992:3;;1164:27;1211:7;1231:55;;;;1335:5;992:3;1325:16;1231:55;1266:5;992:3;1256:16;1204:151;;;;;731:640::o;1018:877:32:-;1079:4;1099:16;;;;;;:36;;-1:-1:-1;1119:16:32;;;;;1099:36;1095:78;;;-1:-1:-1;1158:4:32;;1018:877;-1:-1:-1;1018:877:32:o;1095:78::-;1186:16;;;;;1182:59;;;-1:-1:-1;1225:5:32;;1018:877;-1:-1:-1;1018:877:32:o;1182:59::-;1394:66;1388:73;1746:36;;;;;2096:66:37;2084:79;;1746:36:32;;;2066:98:37;1746:32:32;;;;;;2039:18:37;;1746:36:32;;;;;;;;;;;;;;;;;;-1:-1:-1;1746:36:32;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1742:147;;-1:-1:-1;1873:5:32;;1018:877;-1:-1:-1;;1018:877:32:o;1742:147::-;1827:7;1018:877;-1:-1:-1;;;1018:877:32:o;2007:123::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;2659:2:37;2449:49:32;;;2641:21:37;2698:2;2678:18;;;2671:30;2737:16;2717:18;;;2710:44;2771:18;;2449:49:32;;;;;;;;;2082:41:::1;2101:17;2082:41;;;;;;;;;;;::::0;:18:::1;:41::i;:::-;2007:123:::0;:::o;2136:161::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;2659:2:37;2449:49:32;;;2641:21:37;2698:2;2678:18;;;2671:30;2737:16;2717:18;;;2710:44;2771:18;;2449:49:32;2457:338:37;2449:49:32;2247:43:::1;2266:17;2285:4;;2247:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;2247:18:32::1;::::0;-1:-1:-1;;;2247:43:32:i:1;:::-;2136:161:::0;;;:::o;931:81::-;971:7;997:8;2819:66;2813:73;;2636:266;997:8;990:15;;931:81;:::o;1901:100::-;2819:66;2813:73;2457:22;;:10;:22;;;2449:49;;;;;;;2659:2:37;2449:49:32;;;2641:21:37;2698:2;2678:18;;;2671:30;2737:16;2717:18;;;2710:44;2771:18;;2449:49:32;2457:338:37;2449:49:32;1975:19:::1;1985:8;1975:9;:19::i;1377:1068:36:-:0;1630:66;1624:73;;1805:93;;;;1923:69;;;;;;;;;;;;;1470:30;;1923:69;2007:11;;:15;2003:436;;2039:12;2057:17;:30;;2088:4;2057:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2038:55;;;2112:7;2107:322;;2278:16;2336:14;2333:1;;2315:36;2382:14;2333:1;2372:25;2908:346:32;2964:21;2988:8;2819:66;2813:73;;2636:266;2988:8;2964:32;;3169:8;3101:66;3094:84;3238:8;3202:45;;3223:13;3202:45;;;;;;;;;;;;2954:300;2908:346;:::o;14:332:37:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:282;582:5;630:6;617:20;681:44;672:7;668:58;659:7;656:71;646:99;;741:1;738;731:12;646:99;776:42;763:56;;543:282;-1:-1:-1;;543:282:37:o;830:186::-;889:6;942:2;930:9;921:7;917:23;913:32;910:52;;;958:1;955;948:12;910:52;981:29;1000:9;981:29;:::i;1021:665::-;1100:6;1108;1116;1169:2;1157:9;1148:7;1144:23;1140:32;1137:52;;;1185:1;1182;1175:12;1137:52;1208:29;1227:9;1208:29;:::i;:::-;1198:39;;1288:2;1277:9;1273:18;1260:32;1311:18;1352:2;1344:6;1341:14;1338:34;;;1368:1;1365;1358:12;1338:34;1406:6;1395:9;1391:22;1381:32;;1451:7;1444:4;1440:2;1436:13;1432:27;1422:55;;1473:1;1470;1463:12;1422:55;1513:2;1500:16;1539:2;1531:6;1528:14;1525:34;;;1555:1;1552;1545:12;1525:34;1600:7;1595:2;1586:6;1582:2;1578:15;1574:24;1571:37;1568:57;;;1621:1;1618;1611:12;1568:57;1652:2;1648;1644:11;1634:21;;1674:6;1664:16;;;;;1021:665;;;;;:::o;2175:277::-;2242:6;2295:2;2283:9;2274:7;2270:23;2266:32;2263:52;;;2311:1;2308;2301:12;2263:52;2343:9;2337:16;2396:5;2389:13;2382:21;2375:5;2372:32;2362:60;;2418:1;2415;2408:12;2800:426;2929:3;2967:6;2961:13;2992:1;3002:129;3016:6;3013:1;3010:13;3002:129;;;3114:4;3098:14;;;3094:25;;3088:32;3075:11;;;3068:53;3031:12;3002:129;;;3149:6;3146:1;3143:13;3140:48;;;3184:1;3175:6;3170:3;3166:16;3159:27;3140:48;-1:-1:-1;3204:16:37;;;;;2800:426;-1:-1:-1;;2800:426:37:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "500000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite", - "owner()": "2409", - "supportsInterface(bytes4)": "infinite", - "transferOwnership(address)": "28337", - "upgradeTo(address)": "28365", - "upgradeToAndCall(address,bytes)": "infinite" - } - }, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "supportsInterface(bytes4)": "01ffc9a7", - "transferOwnership(address)": "f2fde38b", - "upgradeTo(address)": "3659cfe6", - "upgradeToAndCall(address,bytes)": "4f1ef286" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementationAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"ownerAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousImplementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ProxyImplementationUpdated\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"id\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Proxy implementing EIP173 for ownership management that accept ETH via receive\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/EIP173ProxyWithReceive.sol\":\"EIP173ProxyWithReceive\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/proxy/EIP173Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xa52a027d9e3ad599c98da343572c0f8e16d65551d6fa0ab218e9e2d0f76e2ab0\",\"license\":\"MIT\"},\"solc_0.8/proxy/EIP173ProxyWithReceive.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\",\"keccak256\":\"0x360b80cd1907a2f32963e3defe6869b60bc99fd6b21b8ef8f91177ec2dd1956d\",\"license\":\"MIT\"},\"solc_0.8/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x68c8cf1a340a53d31de8ed808bb66d64e83d50b20d80a0b2dff6aba903cebc98\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "notice": "Proxy implementing EIP173 for ownership management that accept ETH via receive", - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/ERC165.json b/extendedArtifactsTron/ERC165.json deleted file mode 100644 index d77ce98..0000000 --- a/extendedArtifactsTron/ERC165.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "contractName": "ERC165", - "sourceName": "solc_0.8/proxy/EIP173Proxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "id", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "supportsInterface(bytes4)": "01ffc9a7" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"id\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/EIP173Proxy.sol\":\"ERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/proxy/EIP173Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xa52a027d9e3ad599c98da343572c0f8e16d65551d6fa0ab218e9e2d0f76e2ab0\",\"license\":\"MIT\"},\"solc_0.8/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x68c8cf1a340a53d31de8ed808bb66d64e83d50b20d80a0b2dff6aba903cebc98\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/ERC165Checker.json b/extendedArtifactsTron/ERC165Checker.json deleted file mode 100644 index a516729..0000000 --- a/extendedArtifactsTron/ERC165Checker.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "contractName": "ERC165Checker", - "sourceName": "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26474726f6e5822122026b21fbc5cb3a8c511abe3b893afdd790714a27fca0b06a96cbf79d729fdf17764736f6c634300080b0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26474726f6e5822122026b21fbc5cb3a8c511abe3b893afdd790714a27fca0b06a96cbf79d729fdf17764736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Library used to query support of an interface declared via {IERC165}. Note that these functions return the actual result of the query: they do not `revert` if an interface is not supported. It is up to the caller to decide what to do in these cases.", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 0x26 0xB2 0x1F 0xBC 0x5C 0xB3 0xA8 0xC5 GT 0xAB 0xE3 0xB8 SWAP4 0xAF 0xDD PUSH26 0x714A27FCA0B06A96CBF79D729FDF17764736F6C634300080B00 CALLER ", - "sourceMap": "434:4185:29:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;434:4185:29;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 0x26 0xB2 0x1F 0xBC 0x5C 0xB3 0xA8 0xC5 GT 0xAB 0xE3 0xB8 SWAP4 0xAF 0xDD PUSH26 0x714A27FCA0B06A96CBF79D729FDF17764736F6C634300080B00 CALLER ", - "sourceMap": "434:4185:29:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "_supportsERC165Interface(address,bytes4)": "infinite", - "getSupportedInterfaces(address,bytes4[] memory)": "infinite", - "supportsAllInterfaces(address,bytes4[] memory)": "infinite", - "supportsERC165(address)": "infinite", - "supportsInterface(address,bytes4)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library used to query support of an interface declared via {IERC165}. Note that these functions return the actual result of the query: they do not `revert` if an interface is not supported. It is up to the caller to decide what to do in these cases.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\":\"ERC165Checker\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\",\"keccak256\":\"0xf7291d7213336b00ee7edbf7cd5034778dd7b0bda2a7489e664f1e5cacc6c24e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/ERC165Storage.json b/extendedArtifactsTron/ERC165Storage.json deleted file mode 100644 index d727bce..0000000 --- a/extendedArtifactsTron/ERC165Storage.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "contractName": "ERC165Storage", - "sourceName": "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Storage based implementation of the {IERC165} interface. Contracts may inherit from this and call {_registerInterface} to declare their support of an interface.", - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - } - }, - "stateVariables": { - "_supportedInterfaces": { - "details": "Mapping of interface ids to whether or not it's supported." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "supportsInterface(bytes4)": "01ffc9a7" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Storage based implementation of the {IERC165} interface. Contracts may inherit from this and call {_registerInterface} to declare their support of an interface.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"stateVariables\":{\"_supportedInterfaces\":{\"details\":\"Mapping of interface ids to whether or not it's supported.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\":\"ERC165Storage\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x77bf0086774bab931413c3388d3a0f7d44cf6878965b72147f57bb0fbbf394bd\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3495, - "contract": "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol:ERC165Storage", - "label": "_supportedInterfaces", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_bytes4,t_bool)" - } - ], - "types": { - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" - }, - "t_mapping(t_bytes4,t_bool)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/ERC1967Proxy.json b/extendedArtifactsTron/ERC1967Proxy.json deleted file mode 100644 index 8191575..0000000 --- a/extendedArtifactsTron/ERC1967Proxy.json +++ /dev/null @@ -1,4039 +0,0 @@ -{ - "contractName": "ERC1967Proxy", - "sourceName": "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x608060405260405161085938038061085983398101604081905261002291610349565b61004d60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610422565b6000805160206108128339815191521461006957610069610447565b6100758282600061007c565b50506104ac565b610085836100b2565b6000825111806100925750805b156100ad576100ab83836100f260201b6100291760201c565b505b505050565b6100bb8161011e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606101178383604051806060016040528060278152602001610832602791396101de565b9392505050565b610131816102bc60201b6100551760201c565b6101985760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101bd60008051602061081283398151915260001b6102cb60201b6100711760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606001600160a01b0384163b6102465760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161018f565b600080856001600160a01b031685604051610261919061045d565b600060405180830381855af49150503d806000811461029c576040519150601f19603f3d011682016040523d82523d6000602084013e6102a1565b606091505b5090925090506102b28282866102ce565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102dd575081610117565b8251156102ed5782518084602001fd5b8160405162461bcd60e51b815260040161018f9190610479565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610338578181015183820152602001610320565b838111156100ab5750506000910152565b6000806040838503121561035c57600080fd5b82516001600160a81b038116811461037357600080fd5b60208401516001600160a01b039190911692506001600160401b038082111561039b57600080fd5b818501915085601f8301126103af57600080fd5b8151818111156103c1576103c1610307565b604051601f8201601f19908116603f011681019083821181831017156103e9576103e9610307565b8160405282815288602084870101111561040257600080fd5b61041383602083016020880161031d565b80955050505050509250929050565b60008282101561044257634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825161046f81846020870161031d565b9190910192915050565b602081526000825180602084015261049881604085016020870161031d565b601f01601f19169190910160400192915050565b610357806104bb6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26474726f6e58221220e6c5d5a4484542bab40437383ef1706d7a3b851f5c85ef1460e1c6d646f5543664736f6c634300080b0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", - "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610074565b6100b9565b565b606061004e83836040518060600160405280602781526020016102fb602791396100dd565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b90565b60006100b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e8080156100d8573d6000f35b3d6000fd5b606073ffffffffffffffffffffffffffffffffffffffff84163b610188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516101b0919061028d565b600060405180830381855af49150503d80600081146101eb576040519150601f19603f3d011682016040523d82523d6000602084013e6101f0565b606091505b509150915061020082828661020a565b9695505050505050565b6060831561021957508161004e565b8251156102295782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017f91906102a9565b60005b83811015610278578181015183820152602001610260565b83811115610287576000848401525b50505050565b6000825161029f81846020870161025d565b9190910192915050565b60208152600082518060208401526102c881604085016020870161025d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26474726f6e58221220e6c5d5a4484542bab40437383ef1706d7a3b851f5c85ef1460e1c6d646f5543664736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.", - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_1827": { - "entryPoint": null, - "id": 1827, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setImplementation_1896": { - "entryPoint": 286, - "id": 1896, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeToAndCall_1941": { - "entryPoint": 124, - "id": 1941, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_upgradeTo_1911": { - "entryPoint": 178, - "id": 1911, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@functionDelegateCall_3109": { - "entryPoint": 242, - "id": 3109, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_3144": { - "entryPoint": 478, - "id": 3144, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_3224": { - "entryPoint": 715, - "id": 3224, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_2899": { - "entryPoint": 700, - "id": 2899, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_3175": { - "entryPoint": 718, - "id": 3175, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 841, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 1117, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 1145, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 1058, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 797, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x01": { - "entryPoint": 1095, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 775, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3334:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "46:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "63:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "70:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "75:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "66:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "66:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "56:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "56:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "56:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "103:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "106:4:37", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "96:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "96:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "96:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "127:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "130:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "120:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "120:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "120:15:37" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "14:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "199:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "209:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "218:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "213:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "278:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "303:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "308:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "299:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "299:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "322:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "327:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "318:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "318:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "312:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "312:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "292:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "292:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "292:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "239:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "242:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "236:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "236:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "250:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "252:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "261:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "264:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "257:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "257:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "252:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "232:3:37", - "statements": [] - }, - "src": "228:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "367:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "380:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "385:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "376:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "376:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "394:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "369:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "369:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "369:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "356:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "359:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "353:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "353:13:37" - }, - "nodeType": "YulIf", - "src": "350:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "177:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "182:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "187:6:37", - "type": "" - } - ], - "src": "146:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "516:969:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "562:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "571:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "574:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "564:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "564:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "564:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "537:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "546:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "533:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "533:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "558:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "529:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "529:32:37" - }, - "nodeType": "YulIf", - "src": "526:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "587:29:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "606:9:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "600:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "600:16:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "591:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "679:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "688:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "691:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "681:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "681:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "681:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "638:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "649:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "664:3:37", - "type": "", - "value": "168" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "669:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "660:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "660:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "673:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "656:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "656:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "645:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "645:31:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "635:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "635:42:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "628:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "628:50:37" - }, - "nodeType": "YulIf", - "src": "625:70:37" - }, - { - "nodeType": "YulAssignment", - "src": "704:41:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "718:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "733:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "738:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "729:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "729:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "742:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "725:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "725:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "714:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "714:31:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "704:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "754:39:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "778:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "789:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "774:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "774:18:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "768:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "768:25:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "758:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "802:28:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "820:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "824:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "816:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "816:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "828:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "812:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "812:18:37" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "806:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "857:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "866:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "869:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "859:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "859:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "859:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "845:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "853:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "842:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "842:14:37" - }, - "nodeType": "YulIf", - "src": "839:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "882:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "896:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "907:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "892:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "892:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "886:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "962:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "971:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "974:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "964:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "964:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "964:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "941:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "945:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "937:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "937:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "952:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "933:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "933:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "926:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "926:35:37" - }, - "nodeType": "YulIf", - "src": "923:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "987:19:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1003:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "997:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "997:9:37" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "991:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1029:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1031:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1031:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1031:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1021:2:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1025:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1018:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1018:10:37" - }, - "nodeType": "YulIf", - "src": "1015:36:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1060:17:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1074:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1070:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1070:7:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1064:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1086:23:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1106:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1100:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1100:9:37" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1090:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1118:71:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1140:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1164:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1168:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1160:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1160:13:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1175:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1156:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1156:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1180:2:37", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1152:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1152:31:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1185:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1148:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1148:40:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1136:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1136:53:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1122:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1248:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1250:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1250:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1250:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1207:10:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1219:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1204:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1204:18:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1227:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1239:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1224:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1224:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1201:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1201:46:37" - }, - "nodeType": "YulIf", - "src": "1198:72:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1286:2:37", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1290:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1279:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1279:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1279:22:37" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1317:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1325:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1310:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1310:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1310:18:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1374:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1383:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1386:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1376:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1376:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1376:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1351:2:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1355:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1347:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1347:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1360:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1343:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1343:20:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1365:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1340:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1340:33:37" - }, - "nodeType": "YulIf", - "src": "1337:53:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1425:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1429:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1421:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1421:11:37" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1438:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1446:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1434:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1434:15:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1451:2:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1399:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "1399:55:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1399:55:37" - }, - { - "nodeType": "YulAssignment", - "src": "1463:16:37", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1473:6:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1463:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "474:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "485:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "497:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "505:6:37", - "type": "" - } - ], - "src": "409:1076:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1539:173:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1569:111:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1590:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1597:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1602:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1593:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1593:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1583:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1583:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1583:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1634:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1637:4:37", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1627:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1627:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1627:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1662:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1665:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1655:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1655:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1655:15:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1555:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1558:1:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1552:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1552:8:37" - }, - "nodeType": "YulIf", - "src": "1549:131:37" - }, - { - "nodeType": "YulAssignment", - "src": "1689:17:37", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1701:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1704:1:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1697:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1697:9:37" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "1689:4:37" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "1521:1:37", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "1524:1:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "1530:4:37", - "type": "" - } - ], - "src": "1490:222:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1749:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1766:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1773:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1778:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1769:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1769:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1759:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1759:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1759:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1806:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1809:4:37", - "type": "", - "value": "0x01" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1799:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1799:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1799:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1830:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1833:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1823:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1823:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1823:15:37" - } - ] - }, - "name": "panic_error_0x01", - "nodeType": "YulFunctionDefinition", - "src": "1717:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2023:235:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2040:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2051:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2033:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2033:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2033:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2074:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2085:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2070:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2070:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2090:2:37", - "type": "", - "value": "45" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2063:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2063:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2063:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2113:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2124:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2109:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2109:18:37" - }, - { - "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2129:34:37", - "type": "", - "value": "ERC1967: new implementation is n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2102:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2102:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2102:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2184:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2195:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2180:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2180:18:37" - }, - { - "hexValue": "6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2200:15:37", - "type": "", - "value": "ot a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2173:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2173:43:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2173:43:37" - }, - { - "nodeType": "YulAssignment", - "src": "2225:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2237:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2248:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2233:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2233:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2225:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2000:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2014:4:37", - "type": "" - } - ], - "src": "1849:409:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2437:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2454:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2465:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2447:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2447:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2447:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2488:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2499:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2484:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2484:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2504:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2477:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2477:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2477:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2527:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2538:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2523:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2523:18:37" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2543:34:37", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2516:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2516:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2516:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2598:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2609:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2594:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2594:18:37" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2614:8:37", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2587:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2587:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2587:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "2632:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2644:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2655:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2640:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2640:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2632:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2414:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2428:4:37", - "type": "" - } - ], - "src": "2263:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2807:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2817:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2837:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2831:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2831:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2821:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2879:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2887:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2875:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2875:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2894:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2899:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "2853:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "2853:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2853:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "2915:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2926:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2931:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2922:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2922:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2915:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2783:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2788:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2799:3:37", - "type": "" - } - ], - "src": "2670:274:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3070:262:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3087:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3098:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3080:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3080:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3080:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3110:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3130:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3124:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3124:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3114:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3157:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3168:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3153:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3153:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3173:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3146:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3146:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3146:34:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3215:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3223:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3211:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3211:15:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3232:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3243:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3228:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3228:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3248:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3189:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "3189:66:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3189:66:37" - }, - { - "nodeType": "YulAssignment", - "src": "3264:62:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3280:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3299:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3307:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3295:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3295:15:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3316:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "3312:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3312:7:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3291:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3291:29:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3276:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3276:45:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3323:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3272:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3272:54:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3264:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3039:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3050:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3061:4:37", - "type": "" - } - ], - "src": "2949:383:37" - } - ] - }, - "contents": "{\n { }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(168, 1), 1)))) { revert(0, 0) }\n value0 := and(value, sub(shl(160, 1), 1))\n let offset := mload(add(headStart, 32))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value1 := memPtr\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n diff := sub(x, y)\n }\n function panic_error_0x01()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x01)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 45)\n mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n mstore(add(headStart, 96), \"ot a contract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH2 0x859 CODESIZE SUB DUP1 PUSH2 0x859 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x22 SWAP2 PUSH2 0x349 JUMP JUMPDEST PUSH2 0x4D PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH2 0x422 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x812 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH2 0x69 JUMPI PUSH2 0x69 PUSH2 0x447 JUMP JUMPDEST PUSH2 0x75 DUP3 DUP3 PUSH1 0x0 PUSH2 0x7C JUMP JUMPDEST POP POP PUSH2 0x4AC JUMP JUMPDEST PUSH2 0x85 DUP4 PUSH2 0xB2 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x92 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0xAD JUMPI PUSH2 0xAB DUP4 DUP4 PUSH2 0xF2 PUSH1 0x20 SHL PUSH2 0x29 OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xBB DUP2 PUSH2 0x11E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x117 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x832 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x1DE JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x131 DUP2 PUSH2 0x2BC PUSH1 0x20 SHL PUSH2 0x55 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x198 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH2 0x1BD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH2 0x812 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH2 0x2CB PUSH1 0x20 SHL PUSH2 0x71 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH2 0x246 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x18F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x261 SWAP2 SWAP1 PUSH2 0x45D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x29C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2A1 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x2B2 DUP3 DUP3 DUP7 PUSH2 0x2CE JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x2DD JUMPI POP DUP2 PUSH2 0x117 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x2ED JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x18F SWAP2 SWAP1 PUSH2 0x479 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x338 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x320 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xAB JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x35C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x39B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x3C1 JUMPI PUSH2 0x3C1 PUSH2 0x307 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0x3E9 JUMPI PUSH2 0x3E9 PUSH2 0x307 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP9 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0x402 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x413 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH2 0x31D JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0x442 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x46F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x31D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x498 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x31D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x357 DUP1 PUSH2 0x4BB PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x74 JUMP JUMPDEST PUSH2 0xB9 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2FB PUSH1 0x27 SWAP2 CODECOPY PUSH2 0xDD JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB4 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xD8 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x188 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x1B0 SWAP2 SWAP1 PUSH2 0x28D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1F0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x200 DUP3 DUP3 DUP7 PUSH2 0x20A JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x219 JUMPI POP DUP2 PUSH2 0x4E JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x229 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17F SWAP2 SWAP1 PUSH2 0x2A9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x278 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x260 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x287 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x29F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x25D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2C8 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x25D JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH21 0x726F6E58221220E6C5D5A4484542BAB40437383EF1 PUSH17 0x6D7A3B851F5C85EF1460E1C6D646F55436 PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC416464726573733A206C6F PUSH24 0x2D6C6576656C2064656C65676174652063616C6C20666169 PUSH13 0x65640000000000000000000000 ", - "sourceMap": "552:830:15:-:0;;;945:217;;;;;;;;;;;;;;;;;;:::i;:::-;1050:54;1103:1;1058:41;1050:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;1018:87:15;1011:95;;;;:::i;:::-;1116:39;1134:6;1142:5;1149;1116:17;:39::i;:::-;945:217;;552:830;;2188:295:16;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;;;;;:53;;:::i;:::-;;2365:112;2188:295;;;:::o;1902:152::-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;-1:-1:-1;;;;;2020:27:16;;;;;;;;1902:152;:::o;6575:198:25:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:25:o;1537:259:16:-;1618:37;1637:17;1618:18;;;;;:37;;:::i;:::-;1610:95;;;;-1:-1:-1;;;1610:95:16;;2051:2:37;1610:95:16;;;2033:21:37;2090:2;2070:18;;;2063:30;2129:34;2109:18;;;2102:62;-1:-1:-1;;;2180:18:37;;;2173:43;2233:19;;1610:95:16;;;;;;;;;1772:17;1715:48;-1:-1:-1;;;;;;;;;;;1742:20:16;;1715:26;;;;;:48;;:::i;:::-;:74;;-1:-1:-1;;;;;;1715:74:16;-1:-1:-1;;;;;1715:74:16;;;;;;;;;;-1:-1:-1;1537:259:16:o;6959:387:25:-;7100:12;-1:-1:-1;;;;;1470:19:25;;;7124:69;;;;-1:-1:-1;;;7124:69:25;;2465:2:37;7124:69:25;;;2447:21:37;2504:2;2484:18;;;2477:30;2543:34;2523:18;;;2516:62;-1:-1:-1;;;2594:18:37;;;2587:36;2640:19;;7124:69:25;2263:402:37;7124:69:25;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:25;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7204:67:25;;-1:-1:-1;7204:67:25;-1:-1:-1;7288:51:25;7204:67;;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:25:o;1180:320::-;-1:-1:-1;;;;;1470:19:25;;:23;;;1180:320::o;1599:147:27:-;1726:4;1599:147::o;7566:692:25:-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:25;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:25;;;;;;;;:::i;14:127:37:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:258;218:1;228:113;242:6;239:1;236:13;228:113;;;318:11;;;312:18;299:11;;;292:39;264:2;257:10;228:113;;;359:6;356:1;353:13;350:48;;;-1:-1:-1;;394:1:37;376:16;;369:27;146:258::o;409:1076::-;497:6;505;558:2;546:9;537:7;533:23;529:32;526:52;;;574:1;571;564:12;526:52;600:16;;-1:-1:-1;;;;;645:31:37;;635:42;;625:70;;691:1;688;681:12;625:70;789:2;774:18;;768:25;-1:-1:-1;;;;;714:31:37;;;;;-1:-1:-1;;;;;;842:14:37;;;839:34;;;869:1;866;859:12;839:34;907:6;896:9;892:22;882:32;;952:7;945:4;941:2;937:13;933:27;923:55;;974:1;971;964:12;923:55;1003:2;997:9;1025:2;1021;1018:10;1015:36;;;1031:18;;:::i;:::-;1106:2;1100:9;1074:2;1160:13;;-1:-1:-1;;1156:22:37;;;1180:2;1152:31;1148:40;1136:53;;;1204:18;;;1224:22;;;1201:46;1198:72;;;1250:18;;:::i;:::-;1290:10;1286:2;1279:22;1325:2;1317:6;1310:18;1365:7;1360:2;1355;1351;1347:11;1343:20;1340:33;1337:53;;;1386:1;1383;1376:12;1337:53;1399:55;1451:2;1446;1438:6;1434:15;1429:2;1425;1421:11;1399:55;:::i;:::-;1473:6;1463:16;;;;;;;409:1076;;;;;:::o;1490:222::-;1530:4;1558:1;1555;1552:8;1549:131;;;1602:10;1597:3;1593:20;1590:1;1583:31;1637:4;1634:1;1627:15;1665:4;1662:1;1655:15;1549:131;-1:-1:-1;1697:9:37;;1490:222::o;1717:127::-;1778:10;1773:3;1769:20;1766:1;1759:31;1809:4;1806:1;1799:15;1833:4;1830:1;1823:15;2670:274;2799:3;2837:6;2831:13;2853:53;2899:6;2894:3;2887:4;2879:6;2875:17;2853:53;:::i;:::-;2922:16;;;;;2670:274;-1:-1:-1;;2670:274:37:o;2949:383::-;3098:2;3087:9;3080:21;3061:4;3130:6;3124:13;3173:6;3168:2;3157:9;3153:18;3146:34;3189:66;3248:6;3243:2;3232:9;3228:18;3223:2;3215:6;3211:15;3189:66;:::i;:::-;3316:2;3295:15;-1:-1:-1;;3291:29:37;3276:45;;;;3323:2;3272:54;;2949:383;-1:-1:-1;;2949:383:37:o;:::-;552:830:15;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_2196": { - "entryPoint": null, - "id": 2196, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_2204": { - "entryPoint": null, - "id": 2204, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_2209": { - "entryPoint": null, - "id": 2209, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_delegate_2169": { - "entryPoint": 185, - "id": 2169, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_fallback_2188": { - "entryPoint": 23, - "id": 2188, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getImplementation_1872": { - "entryPoint": null, - "id": 1872, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_implementation_1839": { - "entryPoint": 116, - "id": 1839, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@functionDelegateCall_3109": { - "entryPoint": 41, - "id": 3109, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_3144": { - "entryPoint": 221, - "id": 3144, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_3224": { - "entryPoint": 113, - "id": 3224, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_2899": { - "entryPoint": 85, - "id": 2899, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_3175": { - "entryPoint": 522, - "id": 3175, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 653, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 681, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 605, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1407:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "188:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "205:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "216:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "198:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "198:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "198:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "239:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "250:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "235:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "235:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "255:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "228:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "228:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "228:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "278:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "289:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "274:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "274:18:37" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "294:34:37", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "267:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "267:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "267:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "349:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "360:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "345:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "345:18:37" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "365:8:37", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "338:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "338:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "338:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "383:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "395:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "406:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "391:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "391:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "383:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "165:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "179:4:37", - "type": "" - } - ], - "src": "14:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "474:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "484:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "493:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "488:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "553:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "578:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "583:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "574:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "574:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "597:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "602:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "593:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "593:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "587:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "587:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "567:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "567:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "567:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "514:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "517:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "511:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "511:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "525:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "527:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "536:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "539:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "532:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "532:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "527:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "507:3:37", - "statements": [] - }, - "src": "503:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "642:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "655:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "660:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "651:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "651:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "669:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "644:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "644:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "644:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "631:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "634:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "628:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "628:13:37" - }, - "nodeType": "YulIf", - "src": "625:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "452:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "457:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "462:6:37", - "type": "" - } - ], - "src": "421:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "821:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "831:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "851:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "845:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "845:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "835:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "893:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "901:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "889:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "889:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "908:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "913:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "867:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "867:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "867:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "929:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "940:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "945:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "936:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "936:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "929:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "797:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "802:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "813:3:37", - "type": "" - } - ], - "src": "684:274:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1084:321:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1101:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1112:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1094:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1094:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1094:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1124:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1144:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1138:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1138:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1128:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1171:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1182:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1167:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1167:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1187:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1160:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1160:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1160:34:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1229:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1237:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1225:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1225:15:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1246:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1257:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1242:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1242:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1262:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1203:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "1203:66:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1203:66:37" - }, - { - "nodeType": "YulAssignment", - "src": "1278:121:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1294:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1313:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1321:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1309:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1309:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1326:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1305:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1305:88:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1290:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1290:104:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1396:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1286:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1286:113:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1278:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1053:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1064:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1075:4:37", - "type": "" - } - ], - "src": "963:442:37" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLDATASIZE PUSH2 0x13 JUMPI PUSH2 0x11 PUSH2 0x17 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x11 JUMPDEST PUSH2 0x27 PUSH2 0x22 PUSH2 0x74 JUMP JUMPDEST PUSH2 0xB9 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x4E DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x2FB PUSH1 0x27 SWAP2 CODECOPY PUSH2 0xDD JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB4 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0xD8 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x188 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x1B0 SWAP2 SWAP1 PUSH2 0x28D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1EB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1F0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x200 DUP3 DUP3 DUP7 PUSH2 0x20A JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x219 JUMPI POP DUP2 PUSH2 0x4E JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x229 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x17F SWAP2 SWAP1 PUSH2 0x2A9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x278 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x260 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x287 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x29F DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x25D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2C8 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x25D JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH21 0x726F6E58221220E6C5D5A4484542BAB40437383EF1 PUSH17 0x6D7A3B851F5C85EF1460E1C6D646F55436 PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", - "sourceMap": "552:830:15:-:0;;;;;;2903:11:17;:9;:11::i;:::-;552:830:15;;2680:11:17;2327:110;2402:28;2412:17;:15;:17::i;:::-;2402:9;:28::i;:::-;2327:110::o;6575:198:25:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:25:o;1180:320::-;1470:19;;;:23;;;1180:320::o;1599:147:27:-;1726:4;1599:147::o;1240:140:15:-;1307:12;1338:35;1035:66:16;1385:54;;;;1306:140;1338:35:15;1331:42;;1240:140;:::o;953:895:17:-;1291:14;1288:1;1285;1272:34;1505:1;1502;1486:14;1483:1;1467:14;1460:5;1447:60;1581:16;1578:1;1575;1560:38;1619:6;1686:66;;;;1801:16;1798:1;1791:27;1686:66;1721:16;1718:1;1711:27;6959:387:25;7100:12;1470:19;;;;7124:69;;;;;;;216:2:37;7124:69:25;;;198:21:37;255:2;235:18;;;228:30;294:34;274:18;;;267:62;365:8;345:18;;;338:36;391:19;;7124:69:25;;;;;;;;;7205:12;7219:23;7246:6;:19;;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7204:67;;;;7288:51;7305:7;7314:10;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:25:o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:25;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;;;;;;;;;;:::i;421:258:37:-;493:1;503:113;517:6;514:1;511:13;503:113;;;593:11;;;587:18;574:11;;;567:39;539:2;532:10;503:113;;;634:6;631:1;628:13;625:48;;;669:1;660:6;655:3;651:16;644:27;625:48;;421:258;;;:::o;684:274::-;813:3;851:6;845:13;867:53;913:6;908:3;901:4;893:6;889:17;867:53;:::i;:::-;936:16;;;;;684:274;-1:-1:-1;;684:274:37:o;963:442::-;1112:2;1101:9;1094:21;1075:4;1144:6;1138:13;1187:6;1182:2;1171:9;1167:18;1160:34;1203:66;1262:6;1257:2;1246:9;1242:18;1237:2;1229:6;1225:15;1203:66;:::i;:::-;1321:2;1309:15;1326:66;1305:88;1290:104;;;;1396:2;1286:113;;963:442;-1:-1:-1;;963:442:37:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "171000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite" - }, - "internal": { - "_implementation()": "2144" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an implementation address that can be changed. This address is stored in storage in the location specified by https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the implementation behind the proxy.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_logic`. If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":\"ERC1967Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/ERC1967Upgrade.json b/extendedArtifactsTron/ERC1967Upgrade.json deleted file mode 100644 index 2accff6..0000000 --- a/extendedArtifactsTron/ERC1967Upgrade.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "contractName": "ERC1967Upgrade", - "sourceName": "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "custom:oz-upgrades-unsafe-allow": "delegatecall", - "details": "This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._", - "events": { - "AdminChanged(address,address)": { - "details": "Emitted when the admin account has changed." - }, - "BeaconUpgraded(address)": { - "details": "Emitted when the beacon is upgraded." - }, - "Upgraded(address)": { - "details": "Emitted when the implementation is upgraded." - } - }, - "kind": "dev", - "methods": {}, - "stateVariables": { - "_ADMIN_SLOT": { - "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor." - }, - "_BEACON_SLOT": { - "details": "The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor." - }, - "_IMPLEMENTATION_SLOT": { - "details": "Storage slot with the address of the current implementation. This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is validated in the constructor." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"delegatecall\",\"details\":\"This abstract contract provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. _Available since v4.1._\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"},\"_BEACON_SLOT\":{\"details\":\"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\"},\"_IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":\"ERC1967Upgrade\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/IBeacon.json b/extendedArtifactsTron/IBeacon.json deleted file mode 100644 index b4377d9..0000000 --- a/extendedArtifactsTron/IBeacon.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "contractName": "IBeacon", - "sourceName": "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol", - "abi": [ - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This is the interface that {BeaconProxy} expects of its beacon.", - "kind": "dev", - "methods": { - "implementation()": { - "details": "Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "implementation()": "5c60da1b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is the interface that {BeaconProxy} expects of its beacon.\",\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Must return an address that can be used as a delegate call target. {BeaconProxy} will check that this address is a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":\"IBeacon\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/IDiamondCut.json b/extendedArtifactsTron/IDiamondCut.json deleted file mode 100644 index e140493..0000000 --- a/extendedArtifactsTron/IDiamondCut.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "contractName": "IDiamondCut", - "sourceName": "solc_0.8/diamond/interfaces/IDiamondCut.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": { - "params": { - "_calldata": "A function call, including function selector and arguments _calldata is executed with delegatecall on _init", - "_diamondCut": "Contains the facet addresses and function selectors", - "_init": "The address of the contract or facet to execute _calldata" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": "1f931c1c" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"diamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Add/replace/remove any number of functions and optionally execute a function with delegatecall\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":\"IDiamondCut\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "diamondCut((address,uint8,bytes4[])[],address,bytes)": { - "notice": "Add/replace/remove any number of functions and optionally execute a function with delegatecall" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/IDiamondLoupe.json b/extendedArtifactsTron/IDiamondLoupe.json deleted file mode 100644 index a212ecf..0000000 --- a/extendedArtifactsTron/IDiamondLoupe.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "contractName": "IDiamondLoupe", - "sourceName": "solc_0.8/diamond/interfaces/IDiamondLoupe.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "facetAddress(bytes4)": { - "details": "If facet is not found return address(0).", - "params": { - "_functionSelector": "The function selector." - }, - "returns": { - "facetAddress_": "The facet address." - } - }, - "facetAddresses()": { - "returns": { - "facetAddresses_": "facetAddresses_" - } - }, - "facetFunctionSelectors(address)": { - "params": { - "_facet": "The facet address." - }, - "returns": { - "facetFunctionSelectors_": "facetFunctionSelectors_" - } - }, - "facets()": { - "returns": { - "facets_": "Facet" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "facetAddress(bytes4)": "cdffacc6", - "facetAddresses()": "52ef6b2c", - "facetFunctionSelectors(address)": "adfca15e", - "facets()": "7a0ed627" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_functionSelector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facetAddress_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facetAddresses_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"facetFunctionSelectors_\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondLoupe.Facet[]\",\"name\":\"facets_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"facetAddress(bytes4)\":{\"details\":\"If facet is not found return address(0).\",\"params\":{\"_functionSelector\":\"The function selector.\"},\"returns\":{\"facetAddress_\":\"The facet address.\"}},\"facetAddresses()\":{\"returns\":{\"facetAddresses_\":\"facetAddresses_\"}},\"facetFunctionSelectors(address)\":{\"params\":{\"_facet\":\"The facet address.\"},\"returns\":{\"facetFunctionSelectors_\":\"facetFunctionSelectors_\"}},\"facets()\":{\"returns\":{\"facets_\":\"Facet\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"facetAddress(bytes4)\":{\"notice\":\"Gets the facet that supports the given selector.\"},\"facetAddresses()\":{\"notice\":\"Get all the facet addresses used by a diamond.\"},\"facetFunctionSelectors(address)\":{\"notice\":\"Gets all the function selectors supported by a specific facet.\"},\"facets()\":{\"notice\":\"Gets all facet addresses and their four byte function selectors.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\":\"IDiamondLoupe\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0x10884024af2c0f7deca0fac4ddf84e76da5dba35b6e02fabeac8ea54c1a5c6f7\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "facetAddress(bytes4)": { - "notice": "Gets the facet that supports the given selector." - }, - "facetAddresses()": { - "notice": "Get all the facet addresses used by a diamond." - }, - "facetFunctionSelectors(address)": { - "notice": "Gets all the function selectors supported by a specific facet." - }, - "facets()": { - "notice": "Gets all facet addresses and their four byte function selectors." - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/IERC165.json b/extendedArtifactsTron/IERC165.json deleted file mode 100644 index 3a6dd24..0000000 --- a/extendedArtifactsTron/IERC165.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "contractName": "IERC165", - "sourceName": "solc_0.8/openzeppelin/utils/introspection/IERC165.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.", - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "supportsInterface(bytes4)": "01ffc9a7" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/IERC173.json b/extendedArtifactsTron/IERC173.json deleted file mode 100644 index 079e66e..0000000 --- a/extendedArtifactsTron/IERC173.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "contractName": "IERC173", - "sourceName": "solc_0.8/diamond/interfaces/IERC173.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "owner_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "events": { - "OwnershipTransferred(address,address)": { - "details": "This emits when ownership of a contract changes." - } - }, - "kind": "dev", - "methods": { - "owner()": { - "returns": { - "owner_": "The address of the owner." - } - }, - "transferOwnership(address)": { - "details": "Set _newOwner to address(0) to renounce any ownership.", - "params": { - "_newOwner": "The address of the new owner of the contract" - } - } - }, - "title": "ERC-173 Contract Ownership Standard Note: the ERC-165 identifier for this interface is 0x7f5828d0", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"OwnershipTransferred(address,address)\":{\"details\":\"This emits when ownership of a contract changes.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"returns\":{\"owner_\":\"The address of the owner.\"}},\"transferOwnership(address)\":{\"details\":\"Set _newOwner to address(0) to renounce any ownership.\",\"params\":{\"_newOwner\":\"The address of the new owner of the contract\"}}},\"title\":\"ERC-173 Contract Ownership Standard Note: the ERC-165 identifier for this interface is 0x7f5828d0\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"owner()\":{\"notice\":\"Get the address of the owner\"},\"transferOwnership(address)\":{\"notice\":\"Set the address of the new owner of the contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/interfaces/IERC173.sol\":\"IERC173\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/interfaces/IERC173.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\",\"keccak256\":\"0x001e07b0fbc894300b939d496ffb005abe398b5bc609802d319b8cdeafe5d36b\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "owner()": { - "notice": "Get the address of the owner" - }, - "transferOwnership(address)": { - "notice": "Set the address of the new owner of the contract" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/IERC1822Proxiable.json b/extendedArtifactsTron/IERC1822Proxiable.json deleted file mode 100644 index 35521da..0000000 --- a/extendedArtifactsTron/IERC1822Proxiable.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "contractName": "IERC1822Proxiable", - "sourceName": "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol", - "abi": [ - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.", - "kind": "dev", - "methods": { - "proxiableUUID()": { - "details": "Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "proxiableUUID()": "52d1902d" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.\",\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":\"IERC1822Proxiable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/Initializable.json b/extendedArtifactsTron/Initializable.json deleted file mode 100644 index e789b3b..0000000 --- a/extendedArtifactsTron/Initializable.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "contractName": "Initializable", - "sourceName": "solc_0.8/openzeppelin/proxy/utils/Initializable.sol", - "abi": [], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "custom:oz-upgrades-unsafe-allow": "constructor constructor() initializer {} ``` ====", - "details": "This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: [.hljs-theme-light.nopadding] ```", - "kind": "dev", - "methods": {}, - "stateVariables": { - "_initialized": { - "details": "Indicates that the contract has been initialized." - }, - "_initializing": { - "details": "Indicates that the contract is in the process of being initialized." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() initializer {} ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: [.hljs-theme-light.nopadding] ```\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_initialized\":{\"details\":\"Indicates that the contract has been initialized.\"},\"_initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xe8196973e4cee18eb42b021dd702c7d41a024cb690f1897d27d80d983a1edafa\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 2698, - "contract": "solc_0.8/openzeppelin/proxy/utils/Initializable.sol:Initializable", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 2701, - "contract": "solc_0.8/openzeppelin/proxy/utils/Initializable.sol:Initializable", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - } - ], - "types": { - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/LibDiamond.json b/extendedArtifactsTron/LibDiamond.json deleted file mode 100644 index e03e038..0000000 --- a/extendedArtifactsTron/LibDiamond.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "contractName": "LibDiamond", - "sourceName": "solc_0.8/diamond/libraries/LibDiamond.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - } - ], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26474726f6e582212203a0ad3f74d3493e5053275b715c5663473e342573d8d1cf37c925822fef9717264736f6c634300080b0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26474726f6e582212203a0ad3f74d3493e5053275b715c5663473e342573d8d1cf37c925822fef9717264736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 GASPRICE EXP CALLTOKENID 0xF7 0x4D CALLVALUE SWAP4 0xE5 SDIV ORIGIN PUSH22 0xB715C5663473E342573D8D1CF37C925822FEF9717264 PUSH20 0x6F6C634300080B00330000000000000000000000 ", - "sourceMap": "423:10258:11:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;423:10258:11;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 GASPRICE EXP CALLTOKENID 0xF7 0x4D CALLVALUE SWAP4 0xE5 SDIV ORIGIN PUSH22 0xB715C5663473E342573D8D1CF37C925822FEF9717264 PUSH20 0x6F6C634300080B00330000000000000000000000 ", - "sourceMap": "423:10258:11:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "addFacet(struct LibDiamond.DiamondStorage storage pointer,address)": "infinite", - "addFunction(struct LibDiamond.DiamondStorage storage pointer,bytes4,uint96,address)": "infinite", - "addFunctions(address,bytes4[] memory)": "infinite", - "contractOwner()": "infinite", - "diamondCut(struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)": "infinite", - "diamondStorage()": "infinite", - "enforceHasContractCode(address,string memory)": "infinite", - "enforceIsContractOwner()": "infinite", - "initializeDiamondCut(address,bytes memory)": "infinite", - "removeFunction(struct LibDiamond.DiamondStorage storage pointer,address,bytes4)": "infinite", - "removeFunctions(address,bytes4[] memory)": "infinite", - "replaceFunctions(address,bytes4[] memory)": "infinite", - "setContractOwner(address)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/libraries/LibDiamond.sol\":\"LibDiamond\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/OptimizedTransparentUpgradeableProxy.json b/extendedArtifactsTron/OptimizedTransparentUpgradeableProxy.json deleted file mode 100644 index a913079..0000000 --- a/extendedArtifactsTron/OptimizedTransparentUpgradeableProxy.json +++ /dev/null @@ -1,6143 +0,0 @@ -{ - "contractName": "OptimizedTransparentUpgradeableProxy", - "sourceName": "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60a060405260405162000fd438038062000fd4833981016040819052620000269162000457565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd62000537565b60008051602062000f8d833981519152146200007557620000756200055d565b62000083828260006200013c565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610462000537565b60008051602062000f6d83398151915214620000d357620000d36200055d565b6001600160a01b038216608081905260008051602062000f6d8339815191528381556040805160008152602081019390935290917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a150505050620005c6565b620001478362000179565b600082511180620001555750805b156200017457620001728383620001bb60201b620002f71760201c565b505b505050565b6200018481620001ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e3838360405180606001604052806027815260200162000fad60279139620002b2565b9392505050565b62000200816200039860201b620003231760201c565b620002685760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806200029160008051602062000f8d83398151915260001b620003a760201b6200028f1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606001600160a01b0384163b6200031c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200025f565b600080856001600160a01b03168560405162000339919062000573565b600060405180830381855af49150503d806000811462000376576040519150601f19603f3d011682016040523d82523d6000602084013e6200037b565b606091505b5090925090506200038e828286620003aa565b9695505050505050565b6001600160a01b03163b151590565b90565b60608315620003bb575081620001e3565b825115620003cc5782518084602001fd5b8160405162461bcd60e51b81526004016200025f919062000591565b80516000906001600160a81b03811681146200040357600080fd5b6001600160a01b031692915050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620004455781810151838201526020016200042b565b83811115620001725750506000910152565b6000806000606084860312156200046d57600080fd5b6200047884620003e8565b92506200048860208501620003e8565b60408501519092506001600160401b0380821115620004a657600080fd5b818601915086601f830112620004bb57600080fd5b815181811115620004d057620004d062000412565b604051601f8201601f19908116603f01168101908382118183101715620004fb57620004fb62000412565b816040528281528960208487010111156200051557600080fd5b6200052883602083016020880162000428565b80955050505050509250925092565b6000828210156200055857634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b600082516200058781846020870162000428565b9190910192915050565b6020815260008251806020840152620005b281604085016020870162000428565b601f01601f19169190910160400192915050565b6080516109686200060560003960008181610160015281816101c401528181610254015281816102ac015281816102d5015261035701526109686000f3fe6080604052600436106100435760003560e01c80633659cfe61461005a5780634f1ef286146100945780635c60da1b146100a7578063f851a440146100ff57610052565b366100525761005061012e565b005b61005061012e565b34801561006657600080fd5b50d3801561007357600080fd5b50d2801561008057600080fd5b5061005061008f3660046107d4565b610148565b6100506100a23660046107ef565b6101ac565b3480156100b357600080fd5b50d380156100c057600080fd5b50d280156100cd57600080fd5b506100d661023a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34801561010b57600080fd5b50d3801561011857600080fd5b50d2801561012557600080fd5b506100d6610292565b61013661033f565b610146610141610430565b610470565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101a4576101a181604051806020016040528060008152506000610494565b50565b6101a161012e565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102325761022d8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610494915050565b505050565b61022d61012e565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561028757610282610430565b905090565b61028f61012e565b90565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561028757507f000000000000000000000000000000000000000000000000000000000000000090565b606061031c838360405180606001604052806027815260200161090c602791396104bf565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006102827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b3660008037600080366000845af43d6000803e80801561048f573d6000f35b3d6000fd5b61049d836105e7565b6000825111806104aa5750805b1561022d576104b983836102f7565b50505050565b606073ffffffffffffffffffffffffffffffffffffffff84163b610565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610427565b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161058d919061089e565b600060405180830381855af49150503d80600081146105c8576040519150601f19603f3d011682016040523d82523d6000602084013e6105cd565b606091505b50915091506105dd828286610634565b9695505050505050565b6105f081610687565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060831561064357508161031c565b8251156106535782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042791906108ba565b73ffffffffffffffffffffffffffffffffffffffff81163b61072b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610427565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000813574ffffffffffffffffffffffffffffffffffffffffff811681146107b857600080fd5b73ffffffffffffffffffffffffffffffffffffffff1692915050565b6000602082840312156107e657600080fd5b61031c82610791565b60008060006040848603121561080457600080fd5b61080d84610791565b9250602084013567ffffffffffffffff8082111561082a57600080fd5b818601915086601f83011261083e57600080fd5b81358181111561084d57600080fd5b87602082850101111561085f57600080fd5b6020830194508093505050509250925092565b60005b8381101561088d578181015183820152602001610875565b838111156104b95750506000910152565b600082516108b0818460208701610872565b9190910192915050565b60208152600082518060208401526108d9816040850160208701610872565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26474726f6e58221220bc2431b188ed4265a7356f0ec4d6a7e2762f6d653930b1919802afece6fcf0fe64736f6c634300080b0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", - "deployedBytecode": "0x6080604052600436106100435760003560e01c80633659cfe61461005a5780634f1ef286146100945780635c60da1b146100a7578063f851a440146100ff57610052565b366100525761005061012e565b005b61005061012e565b34801561006657600080fd5b50d3801561007357600080fd5b50d2801561008057600080fd5b5061005061008f3660046107d4565b610148565b6100506100a23660046107ef565b6101ac565b3480156100b357600080fd5b50d380156100c057600080fd5b50d280156100cd57600080fd5b506100d661023a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34801561010b57600080fd5b50d3801561011857600080fd5b50d2801561012557600080fd5b506100d6610292565b61013661033f565b610146610141610430565b610470565b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156101a4576101a181604051806020016040528060008152506000610494565b50565b6101a161012e565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614156102325761022d8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060019250610494915050565b505050565b61022d61012e565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561028757610282610430565b905090565b61028f61012e565b90565b60003373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016141561028757507f000000000000000000000000000000000000000000000000000000000000000090565b606061031c838360405180606001604052806027815260200161090c602791396104bf565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161415610146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006102827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b3660008037600080366000845af43d6000803e80801561048f573d6000f35b3d6000fd5b61049d836105e7565b6000825111806104aa5750805b1561022d576104b983836102f7565b50505050565b606073ffffffffffffffffffffffffffffffffffffffff84163b610565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610427565b6000808573ffffffffffffffffffffffffffffffffffffffff168560405161058d919061089e565b600060405180830381855af49150503d80600081146105c8576040519150601f19603f3d011682016040523d82523d6000602084013e6105cd565b606091505b50915091506105dd828286610634565b9695505050505050565b6105f081610687565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060831561064357508161031c565b8251156106535782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042791906108ba565b73ffffffffffffffffffffffffffffffffffffffff81163b61072b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610427565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000813574ffffffffffffffffffffffffffffffffffffffffff811681146107b857600080fd5b73ffffffffffffffffffffffffffffffffffffffff1692915050565b6000602082840312156107e657600080fd5b61031c82610791565b60008060006040848603121561080457600080fd5b61080d84610791565b9250602084013567ffffffffffffffff8082111561082a57600080fd5b818601915086601f83011261083e57600080fd5b81358181111561084d57600080fd5b87602082850101111561085f57600080fd5b6020830194508093505050509250925092565b60005b8381101561088d578181015183820152602001610875565b838111156104b95750506000910152565b600082516108b0818460208701610872565b9190910192915050565b60208152600082518060208401526108d9816040850160208701610872565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26474726f6e58221220bc2431b188ed4265a7356f0ec4d6a7e2762f6d653930b1919802afece6fcf0fe64736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", - "kind": "dev", - "methods": { - "admin()": { - "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" - }, - "constructor": { - "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." - }, - "implementation()": { - "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_1827": { - "entryPoint": null, - "id": 1827, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_3803": { - "entryPoint": null, - "id": 3803, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_setImplementation_1896": { - "entryPoint": 490, - "id": 1896, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeToAndCall_1941": { - "entryPoint": 316, - "id": 1941, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_upgradeTo_1911": { - "entryPoint": 377, - "id": 1911, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@functionDelegateCall_3109": { - "entryPoint": 443, - "id": 3109, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_3144": { - "entryPoint": 690, - "id": 3144, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_3224": { - "entryPoint": 935, - "id": 3224, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_2899": { - "entryPoint": 920, - "id": 2899, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_3175": { - "entryPoint": 938, - "id": 3175, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 1000, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 1111, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 1395, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 1425, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 1335, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 1064, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x01": { - "entryPoint": 1373, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1042, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3863:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:178:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "84:28:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "105:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "99:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "99:13:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "88:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "179:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "188:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "191:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "181:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "181:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "181:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "134:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "147:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "164:3:37", - "type": "", - "value": "168" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "169:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "160:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "160:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "173:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "156:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "156:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "143:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "143:33:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "131:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "131:46:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "124:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "124:54:37" - }, - "nodeType": "YulIf", - "src": "121:74:37" - }, - { - "nodeType": "YulAssignment", - "src": "204:42:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "217:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "234:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "239:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "230:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "230:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "226:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "226:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "213:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "213:33:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "204:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:37", - "type": "" - } - ], - "src": "14:238:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "289:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "306:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "313:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "318:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "309:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "309:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "299:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "299:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "299:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "346:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "349:4:37", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "339:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "339:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "339:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "370:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "373:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "363:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "363:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "363:15:37" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "257:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "442:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "452:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "461:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "456:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "521:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "546:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "551:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "542:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "542:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "565:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "570:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "561:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "561:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "555:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "555:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "535:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "535:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "535:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "482:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "485:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "479:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "479:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "493:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "495:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "504:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "507:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "500:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "500:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "495:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "475:3:37", - "statements": [] - }, - "src": "471:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "623:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "628:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "619:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "619:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "637:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "612:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "612:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "612:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "599:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "602:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "596:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "596:13:37" - }, - "nodeType": "YulIf", - "src": "593:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "420:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "425:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "430:6:37", - "type": "" - } - ], - "src": "389:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "776:929:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "822:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "831:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "834:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "824:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "824:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "824:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "797:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "806:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "793:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "793:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "818:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "789:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "789:32:37" - }, - "nodeType": "YulIf", - "src": "786:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "847:50:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "887:9:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "857:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "857:40:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "847:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "906:59:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "950:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "961:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "946:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "946:18:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "916:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "916:49:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "906:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "974:39:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "998:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1009:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "994:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "994:18:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "988:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "988:25:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "978:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1022:28:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1040:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1044:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1036:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1036:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1048:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1032:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1032:18:37" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1026:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1077:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1086:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1089:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1079:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1079:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1079:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1065:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1073:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1062:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1062:14:37" - }, - "nodeType": "YulIf", - "src": "1059:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1102:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1116:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1127:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1112:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1112:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1106:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1182:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1191:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1194:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1184:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1184:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1184:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1161:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1165:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1157:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1157:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1172:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1153:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1153:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1146:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1146:35:37" - }, - "nodeType": "YulIf", - "src": "1143:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1207:19:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1223:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1217:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1217:9:37" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1211:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1249:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1251:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1251:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1251:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1241:2:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1245:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1238:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1238:10:37" - }, - "nodeType": "YulIf", - "src": "1235:36:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1280:17:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1294:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1290:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1290:7:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1284:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1306:23:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1326:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1320:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1320:9:37" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1310:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1338:71:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1360:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1384:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1388:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1380:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1380:13:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1395:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1376:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1376:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1400:2:37", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1372:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1372:31:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1405:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1368:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1368:40:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1356:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1356:53:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1342:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1468:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1470:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1470:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1470:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1427:10:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1439:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1424:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1424:18:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1447:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1459:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1444:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1444:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1421:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1421:46:37" - }, - "nodeType": "YulIf", - "src": "1418:72:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1506:2:37", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1510:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1499:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1499:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1499:22:37" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1537:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1545:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1530:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1530:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1530:18:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1594:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1603:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1606:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1596:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1596:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1596:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1571:2:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1575:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1567:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1567:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1580:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1563:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1563:20:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1585:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1560:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1560:33:37" - }, - "nodeType": "YulIf", - "src": "1557:53:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1645:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1649:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1641:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1641:11:37" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1658:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1666:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1654:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1654:15:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1671:2:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1619:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "1619:55:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1619:55:37" - }, - { - "nodeType": "YulAssignment", - "src": "1683:16:37", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1693:6:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1683:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "726:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "737:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "749:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "757:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "765:6:37", - "type": "" - } - ], - "src": "652:1053:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1759:173:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1789:111:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1810:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1817:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1822:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1813:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1813:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1803:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1803:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1803:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1854:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1857:4:37", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1847:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1847:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1847:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1882:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1885:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1875:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1875:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1875:15:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1775:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1778:1:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1772:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1772:8:37" - }, - "nodeType": "YulIf", - "src": "1769:131:37" - }, - { - "nodeType": "YulAssignment", - "src": "1909:17:37", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1921:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1924:1:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1917:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1917:9:37" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "1909:4:37" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "1741:1:37", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "1744:1:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "1750:4:37", - "type": "" - } - ], - "src": "1710:222:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1969:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1986:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1993:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1998:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1989:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1989:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1979:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1979:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1979:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2026:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2029:4:37", - "type": "", - "value": "0x01" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2019:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2019:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2019:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2050:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2053:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2043:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2043:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2043:15:37" - } - ] - }, - "name": "panic_error_0x01", - "nodeType": "YulFunctionDefinition", - "src": "1937:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2198:175:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2208:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2220:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2231:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2216:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2216:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2208:4:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2243:29:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2261:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2266:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2257:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2257:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2270:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2253:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2253:19:37" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2247:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2288:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2303:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2311:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2299:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2299:15:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2281:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2281:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2281:34:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2335:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2346:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2331:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2331:18:37" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2355:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2363:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2351:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2351:15:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2324:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2324:43:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2324:43:37" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2159:9:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2170:6:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2178:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2189:4:37", - "type": "" - } - ], - "src": "2069:304:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2552:235:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2569:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2580:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2562:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2562:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2562:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2603:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2614:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2599:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2599:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2619:2:37", - "type": "", - "value": "45" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2592:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2592:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2592:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2642:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2653:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2638:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2638:18:37" - }, - { - "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2658:34:37", - "type": "", - "value": "ERC1967: new implementation is n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2631:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2631:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2631:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2713:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2724:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2709:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2709:18:37" - }, - { - "hexValue": "6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2729:15:37", - "type": "", - "value": "ot a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2702:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2702:43:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2702:43:37" - }, - { - "nodeType": "YulAssignment", - "src": "2754:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2766:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2777:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2762:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2762:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2754:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2529:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2543:4:37", - "type": "" - } - ], - "src": "2378:409:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2966:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2983:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2994:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2976:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2976:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2976:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3017:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3028:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3013:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3013:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3033:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3006:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3006:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3006:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3056:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3067:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3052:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3052:18:37" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3072:34:37", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3045:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3045:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3045:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3127:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3138:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3123:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3123:18:37" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3143:8:37", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3116:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3116:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3116:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "3161:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3173:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3184:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3169:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3169:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3161:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2943:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2957:4:37", - "type": "" - } - ], - "src": "2792:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3336:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3346:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3366:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3360:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3360:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3350:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3408:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3416:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3404:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3404:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3423:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3428:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3382:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "3382:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3382:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "3444:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3455:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3460:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3451:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3451:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3444:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3312:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3317:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3328:3:37", - "type": "" - } - ], - "src": "3199:274:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3599:262:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3616:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3627:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3609:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3609:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3609:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3639:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3659:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3653:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3653:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3643:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3686:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3697:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3682:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3682:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3702:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3675:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3675:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3675:34:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3744:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3752:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3740:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3740:15:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3761:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3772:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3757:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3757:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3777:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3718:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "3718:66:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3718:66:37" - }, - { - "nodeType": "YulAssignment", - "src": "3793:62:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3809:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3828:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3836:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3824:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3824:15:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3845:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "3841:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3841:7:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3820:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3820:29:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3805:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3805:45:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3852:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3801:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3801:54:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3793:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3568:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3579:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3590:4:37", - "type": "" - } - ], - "src": "3478:383:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n let value_1 := mload(offset)\n if iszero(eq(value_1, and(value_1, sub(shl(168, 1), 1)))) { revert(0, 0) }\n value := and(value_1, sub(shl(160, 1), 1))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n let offset := mload(add(headStart, 64))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value2 := memPtr\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n diff := sub(x, y)\n }\n function panic_error_0x01()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x01)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 45)\n mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n mstore(add(headStart, 96), \"ot a contract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0xFD4 CODESIZE SUB DUP1 PUSH3 0xFD4 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x457 JUMP JUMPDEST DUP3 DUP2 PUSH3 0x55 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH3 0x537 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xF8D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0x75 JUMPI PUSH3 0x75 PUSH3 0x55D JUMP JUMPDEST PUSH3 0x83 DUP3 DUP3 PUSH1 0x0 PUSH3 0x13C JUMP JUMPDEST POP PUSH3 0xB3 SWAP1 POP PUSH1 0x1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6104 PUSH3 0x537 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xF6D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0xD3 JUMPI PUSH3 0xD3 PUSH3 0x55D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x80 DUP2 SWAP1 MSTORE PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xF6D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 DUP2 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 SWAP2 PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP PUSH3 0x5C6 JUMP JUMPDEST PUSH3 0x147 DUP4 PUSH3 0x179 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH3 0x155 JUMPI POP DUP1 JUMPDEST ISZERO PUSH3 0x174 JUMPI PUSH3 0x172 DUP4 DUP4 PUSH3 0x1BB PUSH1 0x20 SHL PUSH3 0x2F7 OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH3 0x184 DUP2 PUSH3 0x1EA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH3 0x1E3 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0xFAD PUSH1 0x27 SWAP2 CODECOPY PUSH3 0x2B2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH3 0x200 DUP2 PUSH3 0x398 PUSH1 0x20 SHL PUSH3 0x323 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x268 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH3 0x291 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0xF8D DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x3A7 PUSH1 0x20 SHL PUSH3 0x28F OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH3 0x31C JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x25F JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH3 0x339 SWAP2 SWAP1 PUSH3 0x573 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x376 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x37B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH3 0x38E DUP3 DUP3 DUP7 PUSH3 0x3AA JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH3 0x3BB JUMPI POP DUP2 PUSH3 0x1E3 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH3 0x3CC JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x25F SWAP2 SWAP1 PUSH3 0x591 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x403 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x445 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x42B JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x172 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x478 DUP5 PUSH3 0x3E8 JUMP JUMPDEST SWAP3 POP PUSH3 0x488 PUSH1 0x20 DUP6 ADD PUSH3 0x3E8 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x4A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x4BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x4D0 JUMPI PUSH3 0x4D0 PUSH3 0x412 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x4FB JUMPI PUSH3 0x4FB PUSH3 0x412 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x515 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x528 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x428 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH3 0x558 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x587 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x428 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH3 0x5B2 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH3 0x428 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH2 0x968 PUSH3 0x605 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x160 ADD MSTORE DUP2 DUP2 PUSH2 0x1C4 ADD MSTORE DUP2 DUP2 PUSH2 0x254 ADD MSTORE DUP2 DUP2 PUSH2 0x2AC ADD MSTORE DUP2 DUP2 PUSH2 0x2D5 ADD MSTORE PUSH2 0x357 ADD MSTORE PUSH2 0x968 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x43 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5A JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x94 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0xA7 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xFF JUMPI PUSH2 0x52 JUMP JUMPDEST CALLDATASIZE PUSH2 0x52 JUMPI PUSH2 0x50 PUSH2 0x12E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x50 PUSH2 0x12E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x50 PUSH2 0x8F CALLDATASIZE PUSH1 0x4 PUSH2 0x7D4 JUMP JUMPDEST PUSH2 0x148 JUMP JUMPDEST PUSH2 0x50 PUSH2 0xA2 CALLDATASIZE PUSH1 0x4 PUSH2 0x7EF JUMP JUMPDEST PUSH2 0x1AC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6 PUSH2 0x23A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x118 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x125 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6 PUSH2 0x292 JUMP JUMPDEST PUSH2 0x136 PUSH2 0x33F JUMP JUMPDEST PUSH2 0x146 PUSH2 0x141 PUSH2 0x430 JUMP JUMPDEST PUSH2 0x470 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x1A4 JUMPI PUSH2 0x1A1 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x494 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1A1 PUSH2 0x12E JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x232 JUMPI PUSH2 0x22D DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x494 SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x22D PUSH2 0x12E JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x287 JUMPI PUSH2 0x282 PUSH2 0x430 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x28F PUSH2 0x12E JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x287 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x31C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x90C PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x4BF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x146 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x42 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x6574000000000000000000000000000000000000000000000000000000000000 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x282 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x48F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x49D DUP4 PUSH2 0x5E7 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x4AA JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x22D JUMPI PUSH2 0x4B9 DUP4 DUP4 PUSH2 0x2F7 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x565 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x427 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x58D SWAP2 SWAP1 PUSH2 0x89E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x5C8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5CD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x5DD DUP3 DUP3 DUP7 PUSH2 0x634 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5F0 DUP2 PUSH2 0x687 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x643 JUMPI POP DUP2 PUSH2 0x31C JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x653 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x427 SWAP2 SWAP1 PUSH2 0x8BA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x72B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74206120636F6E747261637400000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x427 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31C DUP3 PUSH2 0x791 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x80D DUP5 PUSH2 0x791 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x82A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x83E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x84D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x85F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x88D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x875 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x4B9 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x8B0 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x872 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x8D9 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x872 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH21 0x726F6E58221220BC2431B188ED4265A7356F0EC4D6 0xA7 0xE2 PUSH23 0x2F6D653930B1919802AFECE6FCF0FE64736F6C63430008 SIGNEXTEND STOP CALLER 0xB5 BALANCE 0x27 PUSH9 0x4A568B3173AE13B9F8 0xA6 ADD PUSH15 0x243E63B6E8EE1178D6A717850B5D61 SUB CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC416464726573733A206C6F PUSH24 0x2D6C6576656C2064656C65676174652063616C6C20666169 PUSH13 0x65640000000000000000000000 ", - "sourceMap": "1653:3648:34:-:0;;;1976:499;;;;;;;;;;;;;;;;;;:::i;:::-;2091:6;2099:5;1050:54:15;1103:1;1058:41;1050:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;1018:87:15;1011:95;;;;:::i;:::-;1116:39;1134:6;1142:5;1149;1116:17;:39::i;:::-;-1:-1:-1;2146:45:34::1;::::0;-1:-1:-1;2190:1:34::1;2154:32;2146:45;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;2123:69:34::1;2116:77;;;;:::i;:::-;-1:-1:-1::0;;;;;2203:15:34;::::1;;::::0;;;-1:-1:-1;;;;;;;;;;;2392:20:34;;;2436:32:::1;::::0;;2277:12:::1;2281:34:37::0;;2346:2;2331:18;;2324:43;;;;3847:66:16;;2436:32:34::1;::::0;2216:18:37;2436:32:34::1;;;;;;;2106:369;1976:499:::0;;;1653:3648;;2188:295:16;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;;;;;:53;;:::i;:::-;;2365:112;2188:295;;;:::o;1902:152::-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;-1:-1:-1;;;;;2020:27:16;;;;;;;;1902:152;:::o;6575:198:25:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:25:o;1537:259:16:-;1618:37;1637:17;1618:18;;;;;:37;;:::i;:::-;1610:95;;;;-1:-1:-1;;;1610:95:16;;2580:2:37;1610:95:16;;;2562:21:37;2619:2;2599:18;;;2592:30;2658:34;2638:18;;;2631:62;-1:-1:-1;;;2709:18:37;;;2702:43;2762:19;;1610:95:16;;;;;;;;;1772:17;1715:48;-1:-1:-1;;;;;;;;;;;1742:20:16;;1715:26;;;;;:48;;:::i;:::-;:74;;-1:-1:-1;;;;;;1715:74:16;-1:-1:-1;;;;;1715:74:16;;;;;;;;;;-1:-1:-1;1537:259:16:o;6959:387:25:-;7100:12;-1:-1:-1;;;;;1470:19:25;;;7124:69;;;;-1:-1:-1;;;7124:69:25;;2994:2:37;7124:69:25;;;2976:21:37;3033:2;3013:18;;;3006:30;3072:34;3052:18;;;3045:62;-1:-1:-1;;;3123:18:37;;;3116:36;3169:19;;7124:69:25;2792:402:37;7124:69:25;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:25;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7204:67:25;;-1:-1:-1;7204:67:25;-1:-1:-1;7288:51:25;7204:67;;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:25:o;1180:320::-;-1:-1:-1;;;;;1470:19:25;;:23;;;1180:320::o;1599:147:27:-;1726:4;1599:147::o;7566:692:25:-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:25;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:25;;;;;;;;:::i;14:238:37:-;99:13;;64:5;;-1:-1:-1;;;;;143:33:37;;131:46;;121:74;;191:1;188;181:12;121:74;-1:-1:-1;;;;;213:33:37;;14:238;-1:-1:-1;;14:238:37:o;257:127::-;318:10;313:3;309:20;306:1;299:31;349:4;346:1;339:15;373:4;370:1;363:15;389:258;461:1;471:113;485:6;482:1;479:13;471:113;;;561:11;;;555:18;542:11;;;535:39;507:2;500:10;471:113;;;602:6;599:1;596:13;593:48;;;-1:-1:-1;;637:1:37;619:16;;612:27;389:258::o;652:1053::-;749:6;757;765;818:2;806:9;797:7;793:23;789:32;786:52;;;834:1;831;824:12;786:52;857:40;887:9;857:40;:::i;:::-;847:50;;916:49;961:2;950:9;946:18;916:49;:::i;:::-;1009:2;994:18;;988:25;906:59;;-1:-1:-1;;;;;;1062:14:37;;;1059:34;;;1089:1;1086;1079:12;1059:34;1127:6;1116:9;1112:22;1102:32;;1172:7;1165:4;1161:2;1157:13;1153:27;1143:55;;1194:1;1191;1184:12;1143:55;1223:2;1217:9;1245:2;1241;1238:10;1235:36;;;1251:18;;:::i;:::-;1326:2;1320:9;1294:2;1380:13;;-1:-1:-1;;1376:22:37;;;1400:2;1372:31;1368:40;1356:53;;;1424:18;;;1444:22;;;1421:46;1418:72;;;1470:18;;:::i;:::-;1510:10;1506:2;1499:22;1545:2;1537:6;1530:18;1585:7;1580:2;1575;1571;1567:11;1563:20;1560:33;1557:53;;;1606:1;1603;1596:12;1557:53;1619:55;1671:2;1666;1658:6;1654:15;1649:2;1645;1641:11;1619:55;:::i;:::-;1693:6;1683:16;;;;;;;652:1053;;;;;:::o;1710:222::-;1750:4;1778:1;1775;1772:8;1769:131;;;1822:10;1817:3;1813:20;1810:1;1803:31;1857:4;1854:1;1847:15;1885:4;1882:1;1875:15;1769:131;-1:-1:-1;1917:9:37;;1710:222::o;1937:127::-;1998:10;1993:3;1989:20;1986:1;1979:31;2029:4;2026:1;2019:15;2053:4;2050:1;2043:15;3199:274;3328:3;3366:6;3360:13;3382:53;3428:6;3423:3;3416:4;3408:6;3404:17;3382:53;:::i;:::-;3451:16;;;;;3199:274;-1:-1:-1;;3199:274:37:o;3478:383::-;3627:2;3616:9;3609:21;3590:4;3659:6;3653:13;3702:6;3697:2;3686:9;3682:18;3675:34;3718:66;3777:6;3772:2;3761:9;3757:18;3752:2;3744:6;3740:15;3718:66;:::i;:::-;3845:2;3824:15;-1:-1:-1;;3820:29:37;3805:45;;;;3852:2;3801:54;;3478:383;-1:-1:-1;;3478:383:37:o;:::-;1653:3648:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_2196": { - "entryPoint": null, - "id": 2196, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_2204": { - "entryPoint": null, - "id": 2204, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_2209": { - "entryPoint": null, - "id": 2209, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_3912": { - "entryPoint": 831, - "id": 3912, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_delegate_2169": { - "entryPoint": 1136, - "id": 2169, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_fallback_2188": { - "entryPoint": 302, - "id": 2188, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getAdmin_3921": { - "entryPoint": null, - "id": 3921, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_getImplementation_1872": { - "entryPoint": null, - "id": 1872, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_implementation_1839": { - "entryPoint": 1072, - "id": 1839, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_1896": { - "entryPoint": 1671, - "id": 1896, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeToAndCall_1941": { - "entryPoint": 1172, - "id": 1941, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_upgradeTo_1911": { - "entryPoint": 1511, - "id": 1911, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@admin_3833": { - "entryPoint": 658, - "id": 3833, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@functionDelegateCall_3109": { - "entryPoint": 759, - "id": 3109, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_3144": { - "entryPoint": 1215, - "id": 3144, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_3224": { - "entryPoint": null, - "id": 3224, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@implementation_3847": { - "entryPoint": 570, - "id": 3847, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@isContract_2899": { - "entryPoint": 803, - "id": 2899, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@upgradeToAndCall_3882": { - "entryPoint": 428, - "id": 3882, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@upgradeTo_3865": { - "entryPoint": 328, - "id": 3865, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@verifyCallResult_3175": { - "entryPoint": 1588, - "id": 3175, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_address": { - "entryPoint": 1937, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 2004, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_calldata_ptr": { - "entryPoint": 2031, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 2206, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 2234, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 2162, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3675:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "63:233:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "73:35:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "101:6:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "88:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "88:20:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "77:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "200:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "209:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "212:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "202:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "202:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "202:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "130:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "143:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "152:44:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "139:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "139:58:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "127:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "127:71:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "120:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "120:79:37" - }, - "nodeType": "YulIf", - "src": "117:99:37" - }, - { - "nodeType": "YulAssignment", - "src": "225:65:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "238:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "247:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "234:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "234:56:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "225:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "42:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:37", - "type": "" - } - ], - "src": "14:282:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "371:116:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "417:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "426:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "429:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "419:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "419:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "419:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "392:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "401:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "388:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "388:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "413:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "384:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "384:32:37" - }, - "nodeType": "YulIf", - "src": "381:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "442:39:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "471:9:37" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "452:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "452:29:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "442:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "337:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "348:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "360:6:37", - "type": "" - } - ], - "src": "301:186:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "598:559:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "644:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "653:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "656:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "646:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "646:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "646:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "619:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "628:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "615:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "615:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "640:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "611:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "611:32:37" - }, - "nodeType": "YulIf", - "src": "608:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "669:39:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "698:9:37" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "679:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "679:29:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "669:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "717:46:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "748:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "759:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "744:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "744:18:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "731:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "731:32:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "721:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "772:28:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "782:18:37", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "776:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "827:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "836:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "839:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "829:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "829:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "829:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "815:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "823:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "812:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "812:14:37" - }, - "nodeType": "YulIf", - "src": "809:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "852:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "866:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "877:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "862:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "862:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "856:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "932:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "941:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "944:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "934:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "934:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "934:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "911:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "915:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "907:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "907:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "922:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "903:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "903:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "896:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "896:35:37" - }, - "nodeType": "YulIf", - "src": "893:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "957:30:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "984:2:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "971:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "971:16:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "961:6:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1014:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1023:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1026:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1016:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1016:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1016:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1002:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1010:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "999:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "999:14:37" - }, - "nodeType": "YulIf", - "src": "996:34:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1080:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1089:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1092:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1082:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1082:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1082:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1053:2:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1057:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1049:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1049:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1066:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1045:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1045:24:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1071:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1042:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1042:37:37" - }, - "nodeType": "YulIf", - "src": "1039:57:37" - }, - { - "nodeType": "YulAssignment", - "src": "1105:21:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1119:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1123:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1115:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1115:11:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1105:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1135:16:37", - "value": { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1145:6:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1135:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "548:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "559:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "571:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "579:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "587:6:37", - "type": "" - } - ], - "src": "492:665:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1263:125:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1273:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1285:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1296:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1281:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1281:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1273:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1315:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1330:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1338:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1326:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1326:55:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1308:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1308:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1308:74:37" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1232:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1243:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1254:4:37", - "type": "" - } - ], - "src": "1162:226:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1567:296:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1584:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1595:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1577:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1577:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1577:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1618:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1629:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1614:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1614:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1634:2:37", - "type": "", - "value": "66" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1607:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1607:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1607:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1657:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1668:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1653:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1653:18:37" - }, - { - "hexValue": "5472616e73706172656e745570677261646561626c6550726f78793a2061646d", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1673:34:37", - "type": "", - "value": "TransparentUpgradeableProxy: adm" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1646:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1646:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1646:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1728:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1739:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1724:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1724:18:37" - }, - { - "hexValue": "696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1744:34:37", - "type": "", - "value": "in cannot fallback to proxy targ" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1717:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1717:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1717:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1799:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1810:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1795:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1795:19:37" - }, - { - "hexValue": "6574", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1816:4:37", - "type": "", - "value": "et" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1788:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1788:33:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1788:33:37" - }, - { - "nodeType": "YulAssignment", - "src": "1830:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1842:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1853:3:37", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1838:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1838:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1830:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1544:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1558:4:37", - "type": "" - } - ], - "src": "1393:470:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2042:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2059:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2070:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2052:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2052:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2052:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2093:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2104:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2089:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2089:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2109:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2082:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2082:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2082:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2132:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2143:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2128:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2128:18:37" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2148:34:37", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2121:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2121:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2121:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2203:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2214:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2199:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2199:18:37" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2219:8:37", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2192:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2192:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2192:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "2237:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2249:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2260:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2245:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2245:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2237:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2019:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2033:4:37", - "type": "" - } - ], - "src": "1868:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2328:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2338:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2347:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2342:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2407:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2432:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2437:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2428:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2428:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2451:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2456:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2447:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2447:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2441:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2441:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2421:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2421:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2421:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2368:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2371:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2365:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2365:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2379:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2381:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2390:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2393:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2386:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2386:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2381:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2361:3:37", - "statements": [] - }, - "src": "2357:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2496:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2509:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2514:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2505:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2505:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2523:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2498:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2498:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2498:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2485:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2488:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2482:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2482:13:37" - }, - "nodeType": "YulIf", - "src": "2479:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "2306:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "2311:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2316:6:37", - "type": "" - } - ], - "src": "2275:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2675:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2685:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2705:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2699:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2699:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2689:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2747:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2755:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2743:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2743:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2762:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2767:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "2721:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "2721:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2721:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "2783:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2794:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2799:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2790:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2790:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2783:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2651:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2656:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2667:3:37", - "type": "" - } - ], - "src": "2538:274:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2938:321:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2955:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2966:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2948:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2948:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2948:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2978:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2998:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2992:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2992:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2982:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3025:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3036:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3021:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3021:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3041:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3014:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3014:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3014:34:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3083:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3091:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3079:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3079:15:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3100:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3111:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3096:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3096:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3116:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3057:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "3057:66:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3057:66:37" - }, - { - "nodeType": "YulAssignment", - "src": "3132:121:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3148:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3167:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3175:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3163:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3163:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3180:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3159:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3159:88:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3144:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3144:104:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3250:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3140:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3140:113:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3132:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2907:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2918:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2929:4:37", - "type": "" - } - ], - "src": "2817:442:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3438:235:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3455:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3466:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3448:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3448:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3448:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3489:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3500:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3485:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3485:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3505:2:37", - "type": "", - "value": "45" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3478:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3478:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3478:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3528:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3539:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3524:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3524:18:37" - }, - { - "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3544:34:37", - "type": "", - "value": "ERC1967: new implementation is n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3517:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3517:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3517:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3599:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3610:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3595:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3595:18:37" - }, - { - "hexValue": "6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3615:15:37", - "type": "", - "value": "ot a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3588:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3588:43:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3588:43:37" - }, - { - "nodeType": "YulAssignment", - "src": "3640:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3652:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3663:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3648:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3648:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3640:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3415:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3429:4:37", - "type": "" - } - ], - "src": "3264:409:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address(offset) -> value\n {\n let value_1 := calldataload(offset)\n if iszero(eq(value_1, and(value_1, 0xffffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value := and(value_1, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n value1 := add(_2, 32)\n value2 := length\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 66)\n mstore(add(headStart, 64), \"TransparentUpgradeableProxy: adm\")\n mstore(add(headStart, 96), \"in cannot fallback to proxy targ\")\n mstore(add(headStart, 128), \"et\")\n tail := add(headStart, 160)\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n }\n function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 45)\n mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n mstore(add(headStart, 96), \"ot a contract\")\n tail := add(headStart, 128)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "3755": [ - { - "length": 32, - "start": 352 - }, - { - "length": 32, - "start": 452 - }, - { - "length": 32, - "start": 596 - }, - { - "length": 32, - "start": 684 - }, - { - "length": 32, - "start": 725 - }, - { - "length": 32, - "start": 855 - } - ] - }, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x43 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x5A JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x94 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0xA7 JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0xFF JUMPI PUSH2 0x52 JUMP JUMPDEST CALLDATASIZE PUSH2 0x52 JUMPI PUSH2 0x50 PUSH2 0x12E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x50 PUSH2 0x12E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x50 PUSH2 0x8F CALLDATASIZE PUSH1 0x4 PUSH2 0x7D4 JUMP JUMPDEST PUSH2 0x148 JUMP JUMPDEST PUSH2 0x50 PUSH2 0xA2 CALLDATASIZE PUSH1 0x4 PUSH2 0x7EF JUMP JUMPDEST PUSH2 0x1AC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0xC0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0xCD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6 PUSH2 0x23A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x118 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x125 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6 PUSH2 0x292 JUMP JUMPDEST PUSH2 0x136 PUSH2 0x33F JUMP JUMPDEST PUSH2 0x146 PUSH2 0x141 PUSH2 0x430 JUMP JUMPDEST PUSH2 0x470 JUMP JUMPDEST JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x1A4 JUMPI PUSH2 0x1A1 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x494 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1A1 PUSH2 0x12E JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x232 JUMPI PUSH2 0x22D DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x494 SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x22D PUSH2 0x12E JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x287 JUMPI PUSH2 0x282 PUSH2 0x430 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x28F PUSH2 0x12E JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x287 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x31C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x90C PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x4BF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EQ ISZERO PUSH2 0x146 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x42 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x6574000000000000000000000000000000000000000000000000000000000000 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x282 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x48F JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH2 0x49D DUP4 PUSH2 0x5E7 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x4AA JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x22D JUMPI PUSH2 0x4B9 DUP4 DUP4 PUSH2 0x2F7 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x565 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x427 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x58D SWAP2 SWAP1 PUSH2 0x89E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x5C8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x5CD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x5DD DUP3 DUP3 DUP7 PUSH2 0x634 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5F0 DUP2 PUSH2 0x687 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x643 JUMPI POP DUP2 PUSH2 0x31C JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x653 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x427 SWAP2 SWAP1 PUSH2 0x8BA JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x72B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74206120636F6E747261637400000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x427 JUMP JUMPDEST PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x7E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x31C DUP3 PUSH2 0x791 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x80D DUP5 PUSH2 0x791 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x82A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x83E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x84D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x85F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x88D JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x875 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x4B9 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x8B0 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x872 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x8D9 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x872 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH21 0x726F6E58221220BC2431B188ED4265A7356F0EC4D6 0xA7 0xE2 PUSH23 0x2F6D653930B1919802AFECE6FCF0FE64736F6C63430008 SIGNEXTEND STOP CALLER ", - "sourceMap": "1653:3648:34:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2903:11:17;:9;:11::i;:::-;1653:3648:34;;2680:11:17;:9;:11::i;4037:134:34:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4037:134:34;;;;;:::i;:::-;;:::i;4547:164::-;;;;;;:::i;:::-;;:::i;3748:129::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1338:42:37;1326:55;;;1308:74;;1296:2;1281:18;3748:129:34;;;;;;;3192:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2327:110:17:-;2375:17;:15;:17::i;:::-;2402:28;2412:17;:15;:17::i;:::-;2402:9;:28::i;:::-;2327:110::o;4037:134:34:-;2649:10;:25;5286:6;2649:25;;2645:99;;;4110:54:::1;4128:17;4147:9;;;;;;;;;;;::::0;4158:5:::1;4110:17;:54::i;:::-;4037:134:::0;:::o;2645:99::-;2722:11;:9;:11::i;4547:164::-;2649:10;:25;5286:6;2649:25;;2645:99;;;4656:48:::1;4674:17;4693:4;;4656:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4699:4:34::1;::::0;-1:-1:-1;4656:17:34::1;::::0;-1:-1:-1;;4656:48:34:i:1;:::-;4547:164:::0;;;:::o;2645:99::-;2722:11;:9;:11::i;3748:129::-;3800:23;2649:10;:25;5286:6;2649:25;;2645:99;;;3853:17:::1;:15;:17::i;:::-;3835:35;;3748:129:::0;:::o;2645:99::-;2722:11;:9;:11::i;:::-;3748:129;:::o;3192:96::-;3235:14;2649:10;:25;5286:6;2649:25;;2645:99;;;-1:-1:-1;5286:6:34;;3748:129::o;6575:198:25:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:25:o;1180:320::-;1470:19;;;:23;;;1180:320::o;4986:207:34:-;5057:10;:25;5286:6;5057:25;;;5049:104;;;;;;;1595:2:37;5049:104:34;;;1577:21:37;1634:2;1614:18;;;1607:30;1673:34;1653:18;;;1646:62;1744:34;1724:18;;;1717:62;1816:4;1795:19;;;1788:33;1838:19;;5049:104:34;;;;;;;;1240:140:15;1307:12;1338:35;1035:66:16;1385:54;;;;1306:140;953:895:17;1291:14;1288:1;1285;1272:34;1505:1;1502;1486:14;1483:1;1467:14;1460:5;1447:60;1581:16;1578:1;1575;1560:38;1619:6;1686:66;;;;1801:16;1798:1;1791:27;1686:66;1721:16;1718:1;1711:27;2188:295:16;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;:53::i;:::-;;2188:295;;;:::o;6959:387:25:-;7100:12;1470:19;;;;7124:69;;;;;;;2070:2:37;7124:69:25;;;2052:21:37;2109:2;2089:18;;;2082:30;2148:34;2128:18;;;2121:62;2219:8;2199:18;;;2192:36;2245:19;;7124:69:25;1868:402:37;7124:69:25;7205:12;7219:23;7246:6;:19;;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7204:67;;;;7288:51;7305:7;7314:10;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:25:o;1902:152:16:-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;;;;;;;;;;1902:152;:::o;7566:692:25:-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:25;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;;;;;;;;;;:::i;1537:259:16:-;1470:19:25;;;;1610:95:16;;;;;;;3466:2:37;1610:95:16;;;3448:21:37;3505:2;3485:18;;;3478:30;3544:34;3524:18;;;3517:62;3615:15;3595:18;;;3588:43;3648:19;;1610:95:16;3264:409:37;1610:95:16;1035:66;1715:74;;;;;;;;;;;;;;;1537:259::o;14:282:37:-;53:5;101:6;88:20;152:44;143:7;139:58;130:7;127:71;117:99;;212:1;209;202:12;117:99;247:42;234:56;;14:282;-1:-1:-1;;14:282:37:o;301:186::-;360:6;413:2;401:9;392:7;388:23;384:32;381:52;;;429:1;426;419:12;381:52;452:29;471:9;452:29;:::i;492:665::-;571:6;579;587;640:2;628:9;619:7;615:23;611:32;608:52;;;656:1;653;646:12;608:52;679:29;698:9;679:29;:::i;:::-;669:39;;759:2;748:9;744:18;731:32;782:18;823:2;815:6;812:14;809:34;;;839:1;836;829:12;809:34;877:6;866:9;862:22;852:32;;922:7;915:4;911:2;907:13;903:27;893:55;;944:1;941;934:12;893:55;984:2;971:16;1010:2;1002:6;999:14;996:34;;;1026:1;1023;1016:12;996:34;1071:7;1066:2;1057:6;1053:2;1049:15;1045:24;1042:37;1039:57;;;1092:1;1089;1082:12;1039:57;1123:2;1119;1115:11;1105:21;;1145:6;1135:16;;;;;492:665;;;;;:::o;2275:258::-;2347:1;2357:113;2371:6;2368:1;2365:13;2357:113;;;2447:11;;;2441:18;2428:11;;;2421:39;2393:2;2386:10;2357:113;;;2488:6;2485:1;2482:13;2479:48;;;-1:-1:-1;;2523:1:37;2505:16;;2498:27;2275:258::o;2538:274::-;2667:3;2705:6;2699:13;2721:53;2767:6;2762:3;2755:4;2747:6;2743:17;2721:53;:::i;:::-;2790:16;;;;;2538:274;-1:-1:-1;;2538:274:37:o;2817:442::-;2966:2;2955:9;2948:21;2929:4;2998:6;2992:13;3041:6;3036:2;3025:9;3021:18;3014:34;3057:66;3116:6;3111:2;3100:9;3096:18;3091:2;3083:6;3079:15;3057:66;:::i;:::-;3175:2;3163:15;3180:66;3159:88;3144:104;;;;3250:2;3140:113;;2817:442;-1:-1:-1;;2817:442:37:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "481600", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite", - "admin()": "infinite", - "implementation()": "infinite", - "upgradeTo(address)": "infinite", - "upgradeToAndCall(address,bytes)": "infinite" - }, - "internal": { - "_admin()": "infinite", - "_beforeFallback()": "infinite", - "_getAdmin()": "infinite" - } - }, - "methodIdentifiers": { - "admin()": "f851a440", - "implementation()": "5c60da1b", - "upgradeTo(address)": "3659cfe6", - "upgradeToAndCall(address,bytes)": "4f1ef286" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\":\"OptimizedTransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"},\"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\",\"keccak256\":\"0xa30117644e27fa5b49e162aae2f62b36c1aca02f801b8c594d46e2024963a534\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/Ownable.json b/extendedArtifactsTron/Ownable.json deleted file mode 100644 index df6cf37..0000000 --- a/extendedArtifactsTron/Ownable.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "contractName": "Ownable", - "sourceName": "solc_0.8/openzeppelin/access/Ownable.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.", - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the contract setting the deployer as the initial owner." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 1599, - "contract": "solc_0.8/openzeppelin/access/Ownable.sol:Ownable", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/OwnershipFacet.json b/extendedArtifactsTron/OwnershipFacet.json deleted file mode 100644 index 29dc795..0000000 --- a/extendedArtifactsTron/OwnershipFacet.json +++ /dev/null @@ -1,793 +0,0 @@ -{ - "contractName": "OwnershipFacet", - "sourceName": "solc_0.8/diamond/facets/OwnershipFacet.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "owner_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b506103078061003a6000396000f3fe608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100505760003560e01c80638da5cb5b14610055578063f2fde38b14610086575b600080fd5b61005d61009b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61009961009436600461027d565b6100e0565b005b60006100db7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b6100e86100f4565b6100f1816101c3565b50565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6004015473ffffffffffffffffffffffffffffffffffffffff1633146101c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020828403121561028f57600080fd5b813574ffffffffffffffffffffffffffffffffffffffffff811681146102b457600080fd5b73ffffffffffffffffffffffffffffffffffffffff16939250505056fea26474726f6e582212206f1c2ed854de3cf42c9921e871f2ec852cb47b39c7e5d46c9d0f0ac6d36ea9ec64736f6c634300080b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100505760003560e01c80638da5cb5b14610055578063f2fde38b14610086575b600080fd5b61005d61009b565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61009961009436600461027d565b6100e0565b005b60006100db7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b6100e86100f4565b6100f1816101c3565b50565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6004015473ffffffffffffffffffffffffffffffffffffffff1633146101c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840160405180910390fd5b565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff8481169182179093556040517fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60006020828403121561028f57600080fd5b813574ffffffffffffffffffffffffffffffffffffffffff811681146102b457600080fd5b73ffffffffffffffffffffffffffffffffffffffff16939250505056fea26474726f6e582212206f1c2ed854de3cf42c9921e871f2ec852cb47b39c7e5d46c9d0f0ac6d36ea9ec64736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { - "returns": { - "owner_": "The address of the owner." - } - }, - "transferOwnership(address)": { - "details": "Set _newOwner to address(0) to renounce any ownership.", - "params": { - "_newOwner": "The address of the new owner of the contract" - } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x307 DUP1 PUSH2 0x3A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x50 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x55 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x86 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5D PUSH2 0x9B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x99 PUSH2 0x94 CALLDATASIZE PUSH1 0x4 PUSH2 0x27D JUMP JUMPDEST PUSH2 0xE0 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH2 0xDB PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xE8 PUSH2 0xF4 JUMP JUMPDEST PUSH2 0xF1 DUP2 PUSH2 0x1C3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A204D75737420626520636F6E7472616374206F776E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6572000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 PUSH16 0x1C2ED854DE3CF42C9921E871F2EC852C 0xB4 PUSH28 0x39C7E5D46C9D0F0AC6D36EA9EC64736F6C634300080B003300000000 ", - "sourceMap": "169:330:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@contractOwner_855": { - "entryPoint": null, - "id": 855, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@diamondStorage_809": { - "entryPoint": null, - "id": 809, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@enforceIsContractOwner_869": { - "entryPoint": 244, - "id": 869, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@owner_559": { - "entryPoint": 155, - "id": 559, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@setContractOwner_843": { - "entryPoint": 451, - "id": 843, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@transferOwnership_546": { - "entryPoint": 224, - "id": 546, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 637, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1010:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "115:125:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "125:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "137:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "148:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "133:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "133:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "125:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "167:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "182:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "190:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "178:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "178:55:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "160:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "160:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "160:74:37" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "84:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "95:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "106:4:37", - "type": "" - } - ], - "src": "14:226:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "315:290:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "361:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "370:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "373:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "363:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "363:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "363:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "336:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "345:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "332:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "332:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "357:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "328:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "328:32:37" - }, - "nodeType": "YulIf", - "src": "325:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "386:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "412:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "399:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "399:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "390:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "510:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "519:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "522:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "512:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "512:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "512:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "444:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "455:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "462:44:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "451:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "451:56:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "441:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "441:67:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "434:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "434:75:37" - }, - "nodeType": "YulIf", - "src": "431:95:37" - }, - { - "nodeType": "YulAssignment", - "src": "535:64:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "549:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "556:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "545:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "545:54:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "535:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "281:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "292:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "304:6:37", - "type": "" - } - ], - "src": "245:360:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "784:224:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "801:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "812:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "794:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "794:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "794:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "835:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "846:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "831:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "831:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "851:2:37", - "type": "", - "value": "34" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "824:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "824:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "824:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "874:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "885:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "870:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "870:18:37" - }, - { - "hexValue": "4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "890:34:37", - "type": "", - "value": "LibDiamond: Must be contract own" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "863:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "863:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "863:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "945:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "956:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "941:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "941:18:37" - }, - { - "hexValue": "6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "961:4:37", - "type": "", - "value": "er" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "934:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "934:32:37" - }, - "nodeType": "YulExpressionStatement", - "src": "934:32:37" - }, - { - "nodeType": "YulAssignment", - "src": "975:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "987:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "998:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "983:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "983:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "975:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "761:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "775:4:37", - "type": "" - } - ], - "src": "610:398:37" - } - ] - }, - "contents": "{\n { }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value0 := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 34)\n mstore(add(headStart, 64), \"LibDiamond: Must be contract own\")\n mstore(add(headStart, 96), \"er\")\n tail := add(headStart, 128)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x50 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x55 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x86 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5D PUSH2 0x9B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x99 PUSH2 0x94 CALLDATASIZE PUSH1 0x4 PUSH2 0x27D JUMP JUMPDEST PUSH2 0xE0 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH2 0xDB PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xE8 PUSH2 0xF4 JUMP JUMPDEST PUSH2 0xF1 DUP2 PUSH2 0x1C3 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x1C1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A204D75737420626520636F6E7472616374206F776E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6572000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C1320 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP2 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND SWAP2 DUP3 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C SWAP4 SWAP1 SWAP3 AND SWAP2 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 PUSH16 0x1C2ED854DE3CF42C9921E871F2EC852C 0xB4 PUSH28 0x39C7E5D46C9D0F0AC6D36EA9EC64736F6C634300080B003300000000 ", - "sourceMap": "169:330:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;380:117;;;:::i;:::-;;;190:42:37;178:55;;;160:74;;148:2;133:18;380:117:5;;;;;;;210:164;;;;;;:::i;:::-;;:::i;:::-;;380:117;429:14;464:26;2220:30:11;;;;;2121:136;464:26:5;455:35;;380:117;:::o;210:164::-;284:35;:33;:35::i;:::-;329:38;357:9;329:27;:38::i;:::-;210:164;:::o;2263:156:11:-;492:45;2343:30;;;;;2329:10;:44;2321:91;;;;;;;812:2:37;2321:91:11;;;794:21:37;851:2;831:18;;;824:30;890:34;870:18;;;863:62;961:4;941:18;;;934:32;983:19;;2321:91:11;;;;;;;;2263:156::o;1851:264::-;1993:16;;;2019:28;;;1993:16;2019:28;;;;;;;;;2062:46;;492:45;;1993:16;;;;;;2062:46;;1915:25;;2062:46;1905:210;;1851:264;:::o;245:360:37:-;304:6;357:2;345:9;336:7;332:23;328:32;325:52;;;373:1;370;363:12;325:52;412:9;399:23;462:44;455:5;451:56;444:5;441:67;431:95;;522:1;519;512:12;431:95;556:42;545:54;;245:360;-1:-1:-1;;;245:360:37:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "155000", - "executionCost": "250", - "totalCost": "155250" - }, - "external": { - "owner()": "2359", - "transferOwnership(address)": "28286" - } - }, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"returns\":{\"owner_\":\"The address of the owner.\"}},\"transferOwnership(address)\":{\"details\":\"Set _newOwner to address(0) to renounce any ownership.\",\"params\":{\"_newOwner\":\"The address of the new owner of the contract\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"owner()\":{\"notice\":\"Get the address of the owner\"},\"transferOwnership(address)\":{\"notice\":\"Set the address of the new owner of the contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/facets/OwnershipFacet.sol\":\"OwnershipFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/facets/OwnershipFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\",\"keccak256\":\"0x6502a171801d68e68de6c5a2b879d5e12a3a1539cdc568c2bfcc268fbdf6c5a9\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IERC173.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\",\"keccak256\":\"0x001e07b0fbc894300b939d496ffb005abe398b5bc609802d319b8cdeafe5d36b\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": { - "owner()": { - "notice": "Get the address of the owner" - }, - "transferOwnership(address)": { - "notice": "Set the address of the new owner of the contract" - } - }, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/Proxied.json b/extendedArtifactsTron/Proxied.json deleted file mode 100644 index 3b6203c..0000000 --- a/extendedArtifactsTron/Proxied.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "contractName": "Proxied", - "sourceName": "solc_0.8/proxy/Proxied.sol", - "abi": [], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/Proxied.sol\":\"Proxied\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/proxy/Proxied.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xaaceeafeeaf0d200ca3942d8bf14c1c4f787a77f79cc87c08bb668e65acdee29\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/Proxy.json b/extendedArtifactsTron/Proxy.json deleted file mode 100644 index 94ecc3d..0000000 --- a/extendedArtifactsTron/Proxy.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "contractName": "Proxy", - "sourceName": "solc_0.8/proxy/Proxy.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousImplementation", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "ProxyImplementationUpdated", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousImplementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ProxyImplementationUpdated\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/proxy/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x68c8cf1a340a53d31de8ed808bb66d64e83d50b20d80a0b2dff6aba903cebc98\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/ProxyAdmin.json b/extendedArtifactsTron/ProxyAdmin.json deleted file mode 100644 index 9b5dbde..0000000 --- a/extendedArtifactsTron/ProxyAdmin.json +++ /dev/null @@ -1,4339 +0,0 @@ -{ - "contractName": "ProxyAdmin", - "sourceName": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeProxyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - } - ], - "name": "getProxyAdmin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - } - ], - "name": "getProxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50604051610c3b380380610c3b833981016040819052610049916100aa565b806100538161005a565b50506100e3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100bc57600080fd5b81516001600160a81b03811681146100d357600080fd5b6001600160a01b03169392505050565b610b49806100f26000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461019357806399a88ec4146101a6578063f2fde38b146101e0578063f3b7dead1461021a57600080fd5b8063204e1c7a14610080578063715018a6146100e35780637eff275e146101145780638da5cb5b1461014e575b600080fd5b34801561008c57600080fd5b50d3801561009957600080fd5b50d280156100a657600080fd5b506100ba6100b536600461089b565b610254565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ef57600080fd5b50d380156100fc57600080fd5b50d2801561010957600080fd5b5061011261030b565b005b34801561012057600080fd5b50d3801561012d57600080fd5b50d2801561013a57600080fd5b506101126101493660046108d5565b61039d565b34801561015a57600080fd5b50d3801561016757600080fd5b50d2801561017457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100ba565b6101126101a1366004610957565b6104a4565b3480156101b257600080fd5b50d380156101bf57600080fd5b50d280156101cc57600080fd5b506101126101db3660046108d5565b6105b2565b3480156101ec57600080fd5b50d380156101f957600080fd5b50d2801561020657600080fd5b5061011261021536600461089b565b610687565b34801561022657600080fd5b50d3801561023357600080fd5b50d2801561024057600080fd5b506100ba61024f36600461089b565b6107b7565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516102a0907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d80600081146102db576040519150601f19603f3d011682016040523d82523d6000602084013e6102e0565b606091505b5091509150816102ef57600080fd5b808060200190518101906103039190610a65565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61039b6000610803565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461041e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610388565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b15801561048857600080fd5b505af115801561049c573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610388565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef28690349061057b9086908690600401610a82565b6000604051808303818588803b15801561059457600080fd5b505af11580156105a8573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610388565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe69060240161046e565b60005473ffffffffffffffffffffffffffffffffffffffff163314610708576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610388565b73ffffffffffffffffffffffffffffffffffffffff81166107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610388565b6107b481610803565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516102a0907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b74ffffffffffffffffffffffffffffffffffffffffff811681146107b457600080fd5b6000602082840312156108ad57600080fd5b81356108b881610878565b73ffffffffffffffffffffffffffffffffffffffff169392505050565b600080604083850312156108e857600080fd5b82356108f381610878565b73ffffffffffffffffffffffffffffffffffffffff908116925060208401359061091c82610878565b92959216935090915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561096c57600080fd5b833561097781610878565b73ffffffffffffffffffffffffffffffffffffffff90811693506020850135906109a082610878565b169150604084013567ffffffffffffffff808211156109be57600080fd5b818601915086601f8301126109d257600080fd5b8135818111156109e4576109e4610928565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610a2a57610a2a610928565b81604052828152896020848701011115610a4357600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b600060208284031215610a7757600080fd5b81516108b881610878565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b81811015610acc57858101830151858201606001528201610ab0565b81811115610ade576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea26474726f6e58221220d8a906359e9e8e893e40c8561b58ac4c83d1f09a0d73ec6aa9adbc62502f101264736f6c634300080b0033", - "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461019357806399a88ec4146101a6578063f2fde38b146101e0578063f3b7dead1461021a57600080fd5b8063204e1c7a14610080578063715018a6146100e35780637eff275e146101145780638da5cb5b1461014e575b600080fd5b34801561008c57600080fd5b50d3801561009957600080fd5b50d280156100a657600080fd5b506100ba6100b536600461089b565b610254565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100ef57600080fd5b50d380156100fc57600080fd5b50d2801561010957600080fd5b5061011261030b565b005b34801561012057600080fd5b50d3801561012d57600080fd5b50d2801561013a57600080fd5b506101126101493660046108d5565b61039d565b34801561015a57600080fd5b50d3801561016757600080fd5b50d2801561017457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100ba565b6101126101a1366004610957565b6104a4565b3480156101b257600080fd5b50d380156101bf57600080fd5b50d280156101cc57600080fd5b506101126101db3660046108d5565b6105b2565b3480156101ec57600080fd5b50d380156101f957600080fd5b50d2801561020657600080fd5b5061011261021536600461089b565b610687565b34801561022657600080fd5b50d3801561023357600080fd5b50d2801561024057600080fd5b506100ba61024f36600461089b565b6107b7565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516102a0907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d80600081146102db576040519150601f19603f3d011682016040523d82523d6000602084013e6102e0565b606091505b5091509150816102ef57600080fd5b808060200190518101906103039190610a65565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61039b6000610803565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461041e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610388565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b15801561048857600080fd5b505af115801561049c573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610388565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef28690349061057b9086908690600401610a82565b6000604051808303818588803b15801561059457600080fd5b505af11580156105a8573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610388565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe69060240161046e565b60005473ffffffffffffffffffffffffffffffffffffffff163314610708576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610388565b73ffffffffffffffffffffffffffffffffffffffff81166107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610388565b6107b481610803565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516102a0907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b74ffffffffffffffffffffffffffffffffffffffffff811681146107b457600080fd5b6000602082840312156108ad57600080fd5b81356108b881610878565b73ffffffffffffffffffffffffffffffffffffffff169392505050565b600080604083850312156108e857600080fd5b82356108f381610878565b73ffffffffffffffffffffffffffffffffffffffff908116925060208401359061091c82610878565b92959216935090915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561096c57600080fd5b833561097781610878565b73ffffffffffffffffffffffffffffffffffffffff90811693506020850135906109a082610878565b169150604084013567ffffffffffffffff808211156109be57600080fd5b818601915086601f8301126109d257600080fd5b8135818111156109e4576109e4610928565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610a2a57610a2a610928565b81604052828152896020848701011115610a4357600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b600060208284031215610a7757600080fd5b81516108b881610878565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b81811015610acc57858101830151858201606001528201610ab0565b81811115610ade576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea26474726f6e58221220d8a906359e9e8e893e40c8561b58ac4c83d1f09a0d73ec6aa9adbc62502f101264736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", - "kind": "dev", - "methods": { - "changeProxyAdmin(address,address)": { - "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." - }, - "getProxyAdmin(address)": { - "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." - }, - "getProxyImplementation(address)": { - "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "upgrade(address,address)": { - "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." - }, - "upgradeAndCall(address,address,bytes)": { - "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_1616": { - "entryPoint": null, - "id": 1616, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_2398": { - "entryPoint": null, - "id": 2398, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_transferOwnership_1696": { - "entryPoint": 90, - "id": 1696, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 170, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:332:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "95:235:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "141:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "150:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "153:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "143:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "143:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "143:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "116:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "125:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "112:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "112:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "137:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "108:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "108:32:37" - }, - "nodeType": "YulIf", - "src": "105:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "166:29:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "185:9:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "179:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "179:16:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "170:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "258:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "267:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "270:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "260:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "260:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "260:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "217:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "228:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:3:37", - "type": "", - "value": "168" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "248:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "239:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "239:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "252:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "235:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "224:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "224:31:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "214:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "214:42:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "207:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "207:50:37" - }, - "nodeType": "YulIf", - "src": "204:70:37" - }, - { - "nodeType": "YulAssignment", - "src": "283:41:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "297:5:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "312:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "317:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "308:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "308:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "321:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "304:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "304:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "293:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "293:31:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "283:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "61:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "72:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "84:6:37", - "type": "" - } - ], - "src": "14:316:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, and(value, sub(shl(168, 1), 1)))) { revert(0, 0) }\n value0 := and(value, sub(shl(160, 1), 1))\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xC3B CODESIZE SUB DUP1 PUSH2 0xC3B DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x49 SWAP2 PUSH2 0xAA JUMP JUMPDEST DUP1 PUSH2 0x53 DUP2 PUSH2 0x5A JUMP JUMPDEST POP POP PUSH2 0xE3 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xD3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xB49 DUP1 PUSH2 0xF2 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9623609D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0x1A6 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1E0 JUMPI DUP1 PUSH4 0xF3B7DEAD EQ PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x204E1C7A EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0x7EFF275E EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x14E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0xA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBA PUSH2 0xB5 CALLDATASIZE PUSH1 0x4 PUSH2 0x89B JUMP JUMPDEST PUSH2 0x254 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0xFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x30B JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x12D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x149 CALLDATASIZE PUSH1 0x4 PUSH2 0x8D5 JUMP JUMPDEST PUSH2 0x39D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBA JUMP JUMPDEST PUSH2 0x112 PUSH2 0x1A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x957 JUMP JUMPDEST PUSH2 0x4A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0x8D5 JUMP JUMPDEST PUSH2 0x5B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0x89B JUMP JUMPDEST PUSH2 0x687 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBA PUSH2 0x24F CALLDATASIZE PUSH1 0x4 PUSH2 0x89B JUMP JUMPDEST PUSH2 0x7B7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH2 0x2A0 SWAP1 PUSH32 0x5C60DA1B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2DB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x303 SWAP2 SWAP1 PUSH2 0xA65 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x391 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x39B PUSH1 0x0 PUSH2 0x803 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x41E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F28397000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x8F283970 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x49C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x525 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x57B SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0xA82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x594 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5A8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x633 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x3659CFE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x3659CFE6 SWAP1 PUSH1 0x24 ADD PUSH2 0x46E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x708 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x388 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x7AB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x388 JUMP JUMPDEST PUSH2 0x7B4 DUP2 PUSH2 0x803 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH2 0x2A0 SWAP1 PUSH32 0xF851A44000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x8B8 DUP2 PUSH2 0x878 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x8F3 DUP2 PUSH2 0x878 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP1 PUSH2 0x91C DUP3 PUSH2 0x878 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 AND SWAP4 POP SWAP1 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x96C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x977 DUP2 PUSH2 0x878 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP1 PUSH2 0x9A0 DUP3 PUSH2 0x878 JUMP JUMPDEST AND SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x9BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x9D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x9E4 JUMPI PUSH2 0x9E4 PUSH2 0x928 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xA2A JUMPI PUSH2 0xA2A PUSH2 0x928 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x8B8 DUP2 PUSH2 0x878 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x40 DUP2 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xACC JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x60 ADD MSTORE DUP3 ADD PUSH2 0xAB0 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xADE JUMPI PUSH1 0x0 PUSH1 0x60 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x60 ADD SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 NATIVEVOTE 0xA9 MOD CALLDATALOAD SWAP15 SWAP15 DUP15 DUP10 RETURNDATACOPY BLOCKHASH 0xC8 JUMP SHL PC 0xAC 0x4C DUP4 TOKENBALANCE CREATE SWAP11 0xD PUSH20 0xEC6AA9ADBC62502F101264736F6C634300080B00 CALLER ", - "sourceMap": "435:2470:21:-:0;;;473:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;516:12;942:32:12;516:12:21;942:18:12;:32::i;:::-;897:84;473:59:21;435:2470;;2291:187:12;2364:16;2383:6;;-1:-1:-1;;;;;2399:17:12;;;-1:-1:-1;;;;;;2399:17:12;;;;;;2431:40;;2383:6;;;;;;;2431:40;;2364:16;2431:40;2354:124;2291:187;:::o;14:316:37:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:37;;214:42;;204:70;;270:1;267;260:12;204:70;-1:-1:-1;;;;;293:31:37;;14:316;-1:-1:-1;;;14:316:37:o;:::-;435:2470:21;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_msgSender_3188": { - "entryPoint": null, - "id": 3188, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_transferOwnership_1696": { - "entryPoint": 2051, - "id": 1696, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@changeProxyAdmin_2484": { - "entryPoint": 925, - "id": 2484, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@getProxyAdmin_2466": { - "entryPoint": 1975, - "id": 2466, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@getProxyImplementation_2432": { - "entryPoint": 596, - "id": 2432, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@owner_1625": { - "entryPoint": null, - "id": 1625, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@renounceOwnership_1653": { - "entryPoint": 779, - "id": 1653, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@transferOwnership_1676": { - "entryPoint": 1671, - "id": 1676, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@upgradeAndCall_2526": { - "entryPoint": 1188, - "id": 2526, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@upgrade_2502": { - "entryPoint": 1458, - "id": 2502, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_payable_fromMemory": { - "entryPoint": 2661, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$2691": { - "entryPoint": 2203, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$2691t_address": { - "entryPoint": 2261, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$2691t_addresst_bytes_memory_ptr": { - "entryPoint": 2391, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 2690, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x41": { - "entryPoint": 2344, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "validator_revert_contract_TransparentUpgradeableProxy": { - "entryPoint": 2168, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:5842:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "88:111:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "177:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "186:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "189:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "179:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "179:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "179:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "111:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "122:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "129:44:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "118:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "118:56:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "108:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "108:67:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "101:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "101:75:37" - }, - "nodeType": "YulIf", - "src": "98:95:37" - } - ] - }, - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "77:5:37", - "type": "" - } - ], - "src": "14:185:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "310:255:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "356:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "365:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "368:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "358:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "358:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "358:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "331:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "340:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "327:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "327:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "352:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "323:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "323:32:37" - }, - "nodeType": "YulIf", - "src": "320:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "381:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "407:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "394:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "394:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "385:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "480:5:37" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "426:53:37" - }, - "nodeType": "YulFunctionCall", - "src": "426:60:37" - }, - "nodeType": "YulExpressionStatement", - "src": "426:60:37" - }, - { - "nodeType": "YulAssignment", - "src": "495:64:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "509:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "516:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "505:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "505:54:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "495:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$2691", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "276:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "287:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "299:6:37", - "type": "" - } - ], - "src": "204:361:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "671:125:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "681:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "693:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "704:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "689:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "689:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "681:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "723:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "738:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "746:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "734:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "734:55:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "716:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "716:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "716:74:37" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "640:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "651:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "662:4:37", - "type": "" - } - ], - "src": "570:226:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "924:438:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "970:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "979:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "982:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "972:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "972:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "972:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "945:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "954:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "941:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "941:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "966:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "937:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "937:32:37" - }, - "nodeType": "YulIf", - "src": "934:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "995:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1021:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1008:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "1008:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "999:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1094:5:37" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "1040:53:37" - }, - "nodeType": "YulFunctionCall", - "src": "1040:60:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1040:60:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1109:52:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1119:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1113:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1170:24:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1184:5:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1191:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1180:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1180:14:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1170:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1203:47:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1235:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1246:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1231:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1231:18:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1218:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "1218:32:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "1207:7:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "1313:7:37" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "1259:53:37" - }, - "nodeType": "YulFunctionCall", - "src": "1259:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1259:62:37" - }, - { - "nodeType": "YulAssignment", - "src": "1330:26:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "1344:7:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1353:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1340:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1340:16:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1330:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$2691t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "882:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "893:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "905:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "913:6:37", - "type": "" - } - ], - "src": "801:561:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1399:152:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1416:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1419:77:37", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1409:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1409:88:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1409:88:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1513:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1516:4:37", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1506:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1506:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1506:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1537:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1540:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1530:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1530:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1530:15:37" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "1367:184:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1705:1280:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1751:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1760:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1763:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1753:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1753:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1753:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1726:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1735:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1722:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1722:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1747:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1718:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1718:32:37" - }, - "nodeType": "YulIf", - "src": "1715:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1776:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1802:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1789:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "1789:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1780:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1875:5:37" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "1821:53:37" - }, - "nodeType": "YulFunctionCall", - "src": "1821:60:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1821:60:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1890:52:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1900:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1894:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1951:24:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1965:5:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1972:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1961:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1961:14:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1951:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1984:47:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2016:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2027:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2012:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2012:18:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "1999:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "1999:32:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "1988:7:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "2094:7:37" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "2040:53:37" - }, - "nodeType": "YulFunctionCall", - "src": "2040:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2040:62:37" - }, - { - "nodeType": "YulAssignment", - "src": "2111:26:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "2125:7:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2134:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2121:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2121:16:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2111:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2146:46:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2177:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2188:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2173:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2173:18:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2160:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "2160:32:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "2150:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2201:28:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2211:18:37", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "2205:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2256:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2265:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2268:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2258:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2258:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2258:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2244:6:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2252:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2241:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2241:14:37" - }, - "nodeType": "YulIf", - "src": "2238:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2281:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2295:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2306:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2291:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2291:22:37" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "2285:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2361:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2370:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2373:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2363:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2363:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2363:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2340:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2344:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2336:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2336:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2351:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2332:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2332:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2325:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2325:35:37" - }, - "nodeType": "YulIf", - "src": "2322:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2386:26:37", - "value": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2409:2:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2396:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "2396:16:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "2390:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2435:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "2437:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "2437:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2437:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2427:2:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2431:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2424:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2424:10:37" - }, - "nodeType": "YulIf", - "src": "2421:36:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2466:76:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2476:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - }, - "variables": [ - { - "name": "_5", - "nodeType": "YulTypedName", - "src": "2470:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2551:23:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2571:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2565:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2565:9:37" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "2555:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2583:71:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2605:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2629:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2633:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2625:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2625:13:37" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "2640:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2621:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2621:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2645:2:37", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2617:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2617:31:37" - }, - { - "name": "_5", - "nodeType": "YulIdentifier", - "src": "2650:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2613:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2613:40:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2601:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2601:53:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "2587:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2713:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "2715:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "2715:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2715:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2672:10:37" - }, - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "2684:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2669:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2669:18:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2692:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2704:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2689:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2689:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "2666:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2666:46:37" - }, - "nodeType": "YulIf", - "src": "2663:72:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2751:2:37", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2755:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2744:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2744:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2744:22:37" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2782:6:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2790:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2775:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2775:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2775:18:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2839:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2848:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2851:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2841:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2841:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2841:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2816:2:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2820:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2812:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2812:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2825:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2808:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2808:20:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2830:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2805:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2805:33:37" - }, - "nodeType": "YulIf", - "src": "2802:53:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2881:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2889:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2877:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2877:15:37" - }, - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "2898:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2902:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2894:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2894:11:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2907:2:37" - } - ], - "functionName": { - "name": "calldatacopy", - "nodeType": "YulIdentifier", - "src": "2864:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "2864:46:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2864:46:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2934:6:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "2942:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2930:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2930:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2947:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2926:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2926:24:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2952:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2919:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2919:35:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2919:35:37" - }, - { - "nodeType": "YulAssignment", - "src": "2963:16:37", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2973:6:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "2963:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$2691t_addresst_bytes_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1655:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "1666:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1678:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1686:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "1694:6:37", - "type": "" - } - ], - "src": "1556:1429:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3060:255:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3106:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3115:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3118:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3108:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3108:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3108:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3081:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3090:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3077:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3077:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3102:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3073:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3073:32:37" - }, - "nodeType": "YulIf", - "src": "3070:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3131:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3157:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "3144:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "3144:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3135:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3230:5:37" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "3176:53:37" - }, - "nodeType": "YulFunctionCall", - "src": "3176:60:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3176:60:37" - }, - { - "nodeType": "YulAssignment", - "src": "3245:64:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3259:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3266:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3255:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3255:54:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3245:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3026:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3037:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3049:6:37", - "type": "" - } - ], - "src": "2990:325:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3511:122:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3528:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3533:66:37", - "type": "", - "value": "0x5c60da1b00000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3521:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3521:79:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3521:79:37" - }, - { - "nodeType": "YulAssignment", - "src": "3609:18:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3620:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3625:1:37", - "type": "", - "value": "4" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3616:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3616:11:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3609:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3495:3:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3503:3:37", - "type": "" - } - ], - "src": "3320:313:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3727:248:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3773:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3782:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3785:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "3775:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3775:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3775:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "3748:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3757:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3744:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3744:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3769:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3740:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3740:32:37" - }, - "nodeType": "YulIf", - "src": "3737:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3798:29:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3817:9:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3811:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3811:16:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3802:5:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3890:5:37" - } - ], - "functionName": { - "name": "validator_revert_contract_TransparentUpgradeableProxy", - "nodeType": "YulIdentifier", - "src": "3836:53:37" - }, - "nodeType": "YulFunctionCall", - "src": "3836:60:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3836:60:37" - }, - { - "nodeType": "YulAssignment", - "src": "3905:64:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3919:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3926:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3915:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3915:54:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3905:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_payable_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3693:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "3704:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3716:6:37", - "type": "" - } - ], - "src": "3638:337:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4154:182:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4171:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4182:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4164:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4164:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4164:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4205:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4216:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4201:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4201:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4221:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4194:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4194:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4194:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4244:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4255:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4240:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4240:18:37" - }, - { - "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4260:34:37", - "type": "", - "value": "Ownable: caller is not the owner" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4233:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4233:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4233:62:37" - }, - { - "nodeType": "YulAssignment", - "src": "4304:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4316:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4327:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4312:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4312:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4304:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4131:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4145:4:37", - "type": "" - } - ], - "src": "3980:356:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4488:627:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4505:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4520:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4528:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4516:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4516:55:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4498:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4498:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4498:74:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4581:12:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4591:2:37", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "4585:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4613:9:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4624:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4609:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4609:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4629:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4602:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4602:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4602:30:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4641:27:37", - "value": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4661:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4655:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "4655:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "4645:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4688:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4699:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4684:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4684:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4704:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4677:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4677:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4677:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4720:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4729:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "4724:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4789:90:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4818:9:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4829:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4814:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4814:17:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4833:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4810:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4810:26:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4852:6:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4860:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4848:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4848:14:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4864:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4844:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4844:23:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4838:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "4838:30:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4803:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4803:66:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4803:66:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4750:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4753:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "4747:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "4747:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "4761:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4763:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4772:1:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "4775:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4768:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4768:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4763:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "4743:3:37", - "statements": [] - }, - "src": "4739:140:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4913:66:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4942:9:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4953:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4938:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4938:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4962:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4934:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4934:31:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4967:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4927:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4927:42:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4927:42:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "4894:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4897:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4891:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "4891:13:37" - }, - "nodeType": "YulIf", - "src": "4888:91:37" - }, - { - "nodeType": "YulAssignment", - "src": "4988:121:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5004:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "5023:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5031:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5019:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5019:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5036:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5015:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5015:88:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5000:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5000:104:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5106:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4996:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4996:113:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4988:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4449:9:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4460:6:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4468:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4479:4:37", - "type": "" - } - ], - "src": "4341:774:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5294:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5311:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5322:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5304:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5304:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5304:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5345:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5356:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5341:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5341:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5361:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5334:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5334:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5334:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5384:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5395:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5380:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5380:18:37" - }, - { - "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5400:34:37", - "type": "", - "value": "Ownable: new owner is the zero a" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5373:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5373:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5373:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5455:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5466:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5451:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5451:18:37" - }, - { - "hexValue": "646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5471:8:37", - "type": "", - "value": "ddress" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5444:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5444:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5444:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "5489:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5501:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5512:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5497:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5497:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5489:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5271:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5285:4:37", - "type": "" - } - ], - "src": "5120:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5718:122:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5735:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5740:66:37", - "type": "", - "value": "0xf851a44000000000000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5728:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "5728:79:37" - }, - "nodeType": "YulExpressionStatement", - "src": "5728:79:37" - }, - { - "nodeType": "YulAssignment", - "src": "5816:18:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5827:3:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5832:1:37", - "type": "", - "value": "4" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5823:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "5823:11:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "5816:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "5702:3:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "5710:3:37", - "type": "" - } - ], - "src": "5527:313:37" - } - ] - }, - "contents": "{\n { }\n function validator_revert_contract_TransparentUpgradeableProxy(value)\n {\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$2691(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_contract_TransparentUpgradeableProxy(value)\n value0 := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$2691t_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_contract_TransparentUpgradeableProxy(value)\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n value0 := and(value, _1)\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_contract_TransparentUpgradeableProxy(value_1)\n value1 := and(value_1, _1)\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_tuple_t_contract$_TransparentUpgradeableProxy_$2691t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_contract_TransparentUpgradeableProxy(value)\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n value0 := and(value, _1)\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_contract_TransparentUpgradeableProxy(value_1)\n value1 := and(value_1, _1)\n let offset := calldataload(add(headStart, 64))\n let _2 := 0xffffffffffffffff\n if gt(offset, _2) { revert(0, 0) }\n let _3 := add(headStart, offset)\n if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(0, 0) }\n let _4 := calldataload(_3)\n if gt(_4, _2) { panic_error_0x41() }\n let _5 := 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_4, 0x1f), _5), 63), _5))\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _4)\n if gt(add(add(_3, _4), 32), dataEnd) { revert(0, 0) }\n calldatacopy(add(memPtr, 32), add(_3, 32), _4)\n mstore(add(add(memPtr, _4), 32), 0)\n value2 := memPtr\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_contract_TransparentUpgradeableProxy(value)\n value0 := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_encode_tuple_packed_t_stringliteral_96a4c6be7716f5be15d118c16bd1d464cb27f01187d0b9218993a5d488a47c29__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n {\n mstore(pos, 0x5c60da1b00000000000000000000000000000000000000000000000000000000)\n end := add(pos, 4)\n }\n function abi_decode_tuple_t_address_payable_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_contract_TransparentUpgradeableProxy(value)\n value0 := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n let _1 := 32\n mstore(add(headStart, _1), 64)\n let length := mload(value1)\n mstore(add(headStart, 64), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 96), mload(add(add(value1, i), _1)))\n }\n if gt(i, length)\n {\n mstore(add(add(headStart, length), 96), 0)\n }\n tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 96)\n }\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_stringliteral_cb23cf6c353ccb16f0d92c8e6b5c5b425654e65dd07e2d295b394de4cf15afb7__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos) -> end\n {\n mstore(pos, 0xf851a44000000000000000000000000000000000000000000000000000000000)\n end := add(pos, 4)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9623609D GT PUSH2 0x4E JUMPI DUP1 PUSH4 0x9623609D EQ PUSH2 0x193 JUMPI DUP1 PUSH4 0x99A88EC4 EQ PUSH2 0x1A6 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1E0 JUMPI DUP1 PUSH4 0xF3B7DEAD EQ PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x204E1C7A EQ PUSH2 0x80 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0x7EFF275E EQ PUSH2 0x114 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x14E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0xA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBA PUSH2 0xB5 CALLDATASIZE PUSH1 0x4 PUSH2 0x89B JUMP JUMPDEST PUSH2 0x254 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xEF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0xFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x30B JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x120 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x12D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x13A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x149 CALLDATASIZE PUSH1 0x4 PUSH2 0x8D5 JUMP JUMPDEST PUSH2 0x39D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x15A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x167 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x174 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xBA JUMP JUMPDEST PUSH2 0x112 PUSH2 0x1A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x957 JUMP JUMPDEST PUSH2 0x4A4 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x1CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x1DB CALLDATASIZE PUSH1 0x4 PUSH2 0x8D5 JUMP JUMPDEST PUSH2 0x5B2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x206 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x112 PUSH2 0x215 CALLDATASIZE PUSH1 0x4 PUSH2 0x89B JUMP JUMPDEST PUSH2 0x687 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x226 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x233 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBA PUSH2 0x24F CALLDATASIZE PUSH1 0x4 PUSH2 0x89B JUMP JUMPDEST PUSH2 0x7B7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH2 0x2A0 SWAP1 PUSH32 0x5C60DA1B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2DB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x303 SWAP2 SWAP1 PUSH2 0xA65 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x391 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x39B PUSH1 0x0 PUSH2 0x803 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x41E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F28397000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x8F283970 SWAP1 PUSH1 0x24 ADD JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x488 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x49C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x525 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4F1EF28600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH4 0x4F1EF286 SWAP1 CALLVALUE SWAP1 PUSH2 0x57B SWAP1 DUP7 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0xA82 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x594 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5A8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x633 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x3659CFE600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 PUSH4 0x3659CFE6 SWAP1 PUSH1 0x24 ADD PUSH2 0x46E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x708 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x388 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x7AB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x388 JUMP JUMPDEST PUSH2 0x7B4 DUP2 PUSH2 0x803 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x40 MLOAD PUSH2 0x2A0 SWAP1 PUSH32 0xF851A44000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7B4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x8B8 DUP2 PUSH2 0x878 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x8F3 DUP2 PUSH2 0x878 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP1 PUSH2 0x91C DUP3 PUSH2 0x878 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 AND SWAP4 POP SWAP1 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x96C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x977 DUP2 PUSH2 0x878 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP1 PUSH2 0x9A0 DUP3 PUSH2 0x878 JUMP JUMPDEST AND SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x9BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x9D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x9E4 JUMPI PUSH2 0x9E4 PUSH2 0x928 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH2 0xA2A JUMPI PUSH2 0xA2A PUSH2 0x928 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH2 0xA43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x20 DUP5 DUP4 ADD ADD MSTORE DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x8B8 DUP2 PUSH2 0x878 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP2 MSTORE PUSH1 0x0 PUSH1 0x20 PUSH1 0x40 DUP2 DUP5 ADD MSTORE DUP4 MLOAD DUP1 PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xACC JUMPI DUP6 DUP2 ADD DUP4 ADD MLOAD DUP6 DUP3 ADD PUSH1 0x60 ADD MSTORE DUP3 ADD PUSH2 0xAB0 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xADE JUMPI PUSH1 0x0 PUSH1 0x60 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x60 ADD SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 NATIVEVOTE 0xA9 MOD CALLDATALOAD SWAP15 SWAP15 DUP15 DUP10 RETURNDATACOPY BLOCKHASH 0xC8 JUMP SHL PC 0xAC 0x4C DUP4 TOKENBALANCE CREATE SWAP11 0xD PUSH20 0xEC6AA9ADBC62502F101264736F6C634300080B00 CALLER ", - "sourceMap": "435:2470:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;701:437;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;701:437:21;;;;;:::i;:::-;;:::i;:::-;;;746:42:37;734:55;;;716:74;;704:2;689:18;701:437:21;;;;;;;1689:101:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1891:148:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1891:148:21;;;;;:::i;:::-;;:::i;1057:85:12:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1103:7:12;1129:6;;;1057:85;;2659:244:21;;;;;;:::i;:::-;;:::i;2244:149::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2244:149:21;;;;;:::i;:::-;;:::i;1939:198:12:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1939:198:12;;;;;:::i;:::-;;:::i;1298:419:21:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1298:419:21;;;;;:::i;:::-;;:::i;701:437::-;797:7;974:12;988:23;1023:5;1015:25;;:40;;;;3533:66:37;3521:79;;3625:1;3616:11;;3320:313;1015:40:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;973:82;;;;1073:7;1065:16;;;;;;1109:10;1098:33;;;;;;;;;;;;:::i;:::-;1091:40;701:437;-1:-1:-1;;;;701:437:21:o;1689:101:12:-;1103:7;1129:6;1269:23;1129:6;719:10:26;1269:23:12;1261:68;;;;;;;4182:2:37;1261:68:12;;;4164:21:37;;;4201:18;;;4194:30;4260:34;4240:18;;;4233:62;4312:18;;1261:68:12;;;;;;;;;1753:30:::1;1780:1;1753:18;:30::i;:::-;1689:101::o:0;1891:148:21:-;1103:7:12;1129:6;1269:23;1129:6;719:10:26;1269:23:12;1261:68;;;;;;;4182:2:37;1261:68:12;;;4164:21:37;;;4201:18;;;4194:30;4260:34;4240:18;;;4233:62;4312:18;;1261:68:12;3980:356:37;1261:68:12;2005:27:21::1;::::0;;;;:17:::1;734:55:37::0;;;2005:27:21::1;::::0;::::1;716:74:37::0;2005:17:21;::::1;::::0;::::1;::::0;689:18:37;;2005:27:21::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1891:148:::0;;:::o;2659:244::-;1103:7:12;1129:6;1269:23;1129:6;719:10:26;1269:23:12;1261:68;;;;;;;4182:2:37;1261:68:12;;;4164:21:37;;;4201:18;;;4194:30;4260:34;4240:18;;;4233:62;4312:18;;1261:68:12;3980:356:37;1261:68:12;2834:62:21::1;::::0;;;;:22:::1;::::0;::::1;::::0;::::1;::::0;2864:9:::1;::::0;2834:62:::1;::::0;2875:14;;2891:4;;2834:62:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;2659:244:::0;;;:::o;2244:149::-;1103:7:12;1129:6;1269:23;1129:6;719:10:26;1269:23:12;1261:68;;;;;;;4182:2:37;1261:68:12;;;4164:21:37;;;4201:18;;;4194:30;4260:34;4240:18;;;4233:62;4312:18;;1261:68:12;3980:356:37;1261:68:12;2355:31:21::1;::::0;;;;:15:::1;734:55:37::0;;;2355:31:21::1;::::0;::::1;716:74:37::0;2355:15:21;::::1;::::0;::::1;::::0;689:18:37;;2355:31:21::1;570:226:37::0;1939:198:12;1103:7;1129:6;1269:23;1129:6;719:10:26;1269:23:12;1261:68;;;;;;;4182:2:37;1261:68:12;;;4164:21:37;;;4201:18;;;4194:30;4260:34;4240:18;;;4233:62;4312:18;;1261:68:12;3980:356:37;1261:68:12;2027:22:::1;::::0;::::1;2019:73;;;::::0;::::1;::::0;;5322:2:37;2019:73:12::1;::::0;::::1;5304:21:37::0;5361:2;5341:18;;;5334:30;5400:34;5380:18;;;5373:62;5471:8;5451:18;;;5444:36;5497:19;;2019:73:12::1;5120:402:37::0;2019:73:12::1;2102:28;2121:8;2102:18;:28::i;:::-;1939:198:::0;:::o;1298:419:21:-;1385:7;1553:12;1567:23;1602:5;1594:25;;:40;;;;5740:66:37;5728:79;;5832:1;5823:11;;5527:313;2291:187:12;2364:16;2383:6;;;2399:17;;;;;;;;;;2431:40;;2383:6;;;;;;;2431:40;;2364:16;2431:40;2354:124;2291:187;:::o;14:185:37:-;129:44;122:5;118:56;111:5;108:67;98:95;;189:1;186;179:12;204:361;299:6;352:2;340:9;331:7;327:23;323:32;320:52;;;368:1;365;358:12;320:52;407:9;394:23;426:60;480:5;426:60;:::i;:::-;516:42;505:54;;204:361;-1:-1:-1;;;204:361:37:o;801:561::-;905:6;913;966:2;954:9;945:7;941:23;937:32;934:52;;;982:1;979;972:12;934:52;1021:9;1008:23;1040:60;1094:5;1040:60;:::i;:::-;1119:42;1180:14;;;;-1:-1:-1;1246:2:37;1231:18;;1218:32;;1259:62;1218:32;1259:62;:::i;:::-;801:561;;1340:16;;;-1:-1:-1;801:561:37;;-1:-1:-1;;801:561:37:o;1367:184::-;1419:77;1416:1;1409:88;1516:4;1513:1;1506:15;1540:4;1537:1;1530:15;1556:1429;1678:6;1686;1694;1747:2;1735:9;1726:7;1722:23;1718:32;1715:52;;;1763:1;1760;1753:12;1715:52;1802:9;1789:23;1821:60;1875:5;1821:60;:::i;:::-;1900:42;1961:14;;;;-1:-1:-1;2027:2:37;2012:18;;1999:32;;2040:62;1999:32;2040:62;:::i;:::-;2121:16;;-1:-1:-1;2188:2:37;2173:18;;2160:32;2211:18;2241:14;;;2238:34;;;2268:1;2265;2258:12;2238:34;2306:6;2295:9;2291:22;2281:32;;2351:7;2344:4;2340:2;2336:13;2332:27;2322:55;;2373:1;2370;2363:12;2322:55;2409:2;2396:16;2431:2;2427;2424:10;2421:36;;;2437:18;;:::i;:::-;2571:2;2565:9;2633:4;2625:13;;2476:66;2621:22;;;2645:2;2617:31;2613:40;2601:53;;;2669:18;;;2689:22;;;2666:46;2663:72;;;2715:18;;:::i;:::-;2755:10;2751:2;2744:22;2790:2;2782:6;2775:18;2830:7;2825:2;2820;2816;2812:11;2808:20;2805:33;2802:53;;;2851:1;2848;2841:12;2802:53;2907:2;2902;2898;2894:11;2889:2;2881:6;2877:15;2864:46;2952:1;2947:2;2942;2934:6;2930:15;2926:24;2919:35;2973:6;2963:16;;;;;;;1556:1429;;;;;:::o;3638:337::-;3716:6;3769:2;3757:9;3748:7;3744:23;3740:32;3737:52;;;3785:1;3782;3775:12;3737:52;3817:9;3811:16;3836:60;3890:5;3836:60;:::i;4341:774::-;4528:42;4520:6;4516:55;4505:9;4498:74;4479:4;4591:2;4629;4624;4613:9;4609:18;4602:30;4661:6;4655:13;4704:6;4699:2;4688:9;4684:18;4677:34;4729:1;4739:140;4753:6;4750:1;4747:13;4739:140;;;4848:14;;;4844:23;;4838:30;4814:17;;;4833:2;4810:26;4803:66;4768:10;;4739:140;;;4897:6;4894:1;4891:13;4888:91;;;4967:1;4962:2;4953:6;4942:9;4938:22;4934:31;4927:42;4888:91;-1:-1:-1;5031:2:37;5019:15;5036:66;5015:88;5000:104;;;;5106:2;4996:113;;4341:774;-1:-1:-1;;;;4341:774:37:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "577800", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "changeProxyAdmin(address,address)": "infinite", - "getProxyAdmin(address)": "infinite", - "getProxyImplementation(address)": "infinite", - "owner()": "2410", - "renounceOwnership()": "28146", - "transferOwnership(address)": "infinite", - "upgrade(address,address)": "infinite", - "upgradeAndCall(address,address,bytes)": "infinite" - } - }, - "methodIdentifiers": { - "changeProxyAdmin(address,address)": "7eff275e", - "getProxyAdmin(address)": "f3b7dead", - "getProxyImplementation(address)": "204e1c7a", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b", - "upgrade(address,address)": "99a88ec4", - "upgradeAndCall(address,address,bytes)": "9623609d" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 1599, - "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/StorageSlot.json b/extendedArtifactsTron/StorageSlot.json deleted file mode 100644 index 18d767b..0000000 --- a/extendedArtifactsTron/StorageSlot.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "contractName": "StorageSlot", - "sourceName": "solc_0.8/openzeppelin/utils/StorageSlot.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26474726f6e5822122090b5bea6889379da5640ea952ebbe611cde132725138d689936a517c4f7c877c64736f6c634300080b0033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26474726f6e5822122090b5bea6889379da5640ea952ebbe611cde132725138d689936a517c4f7c877c64736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 { bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\"); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 SWAP1 0xB5 0xBE 0xA6 DUP9 SWAP4 PUSH26 0xDA5640EA952EBBE611CDE132725138D689936A517C4F7C877C64 PUSH20 0x6F6C634300080B00330000000000000000000000 ", - "sourceMap": "1264:1219:27:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1264:1219:27;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 SWAP1 0xB5 0xBE 0xA6 DUP9 SWAP4 PUSH26 0xDA5640EA952EBBE611CDE132725138D689936A517C4F7C877C64 PUSH20 0x6F6C634300080B00330000000000000000000000 ", - "sourceMap": "1264:1219:27:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "getAddressSlot(bytes32)": "infinite", - "getBooleanSlot(bytes32)": "infinite", - "getBytes32Slot(bytes32)": "infinite", - "getUint256Slot(bytes32)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 { bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\"); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/TransparentUpgradeableProxy.json b/extendedArtifactsTron/TransparentUpgradeableProxy.json deleted file mode 100644 index abb374d..0000000 --- a/extendedArtifactsTron/TransparentUpgradeableProxy.json +++ /dev/null @@ -1,6829 +0,0 @@ -{ - "contractName": "TransparentUpgradeableProxy", - "sourceName": "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60806040526040516200124138038062001241833981016040819052620000269162000526565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd62000606565b600080516020620011fa833981519152146200007557620000756200062c565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610462000606565b600080516020620011da83398151915214620000d357620000d36200062c565b620000de8262000124565b50505062000695565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620003671760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200121a6027913962000381565b9392505050565b60006200021a600080516020620011da83398151915260001b6200046760201b620002db1760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd600080516020620011da83398151915260001b6200046760201b620002db1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b620003931760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd600080516020620011fa83398151915260001b6200046760201b620002db1760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000642565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000660565b80516000906001600160a81b0381168114620004d257600080fd5b6001600160a01b031692915050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000514578181015183820152602001620004fa565b838111156200011d5750506000910152565b6000806000606084860312156200053c57600080fd5b6200054784620004b7565b92506200055760208501620004b7565b60408501519092506001600160401b03808211156200057557600080fd5b818601915086601f8301126200058a57600080fd5b8151818111156200059f576200059f620004e1565b604051601f8201601f19908116603f01168101908382118183101715620005ca57620005ca620004e1565b81604052828152896020848701011115620005e457600080fd5b620005f7836020830160208801620004f7565b80955050505050509250925092565b6000828210156200062757634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000656818460208701620004f7565b9190910192915050565b602081526000825180602084015262000681816040850160208701620004f7565b601f01601f19169190910160400192915050565b610b3580620006a56000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100c25780638f2839701461011a578063f851a440146101545761006d565b80633659cfe6146100755780634f1ef286146100af5761006d565b3661006d5761006b610183565b005b61006b610183565b34801561008157600080fd5b50d3801561008e57600080fd5b50d2801561009b57600080fd5b5061006b6100aa3660046109a1565b61019d565b61006b6100bd3660046109bc565b6101fe565b3480156100ce57600080fd5b50d380156100db57600080fd5b50d280156100e857600080fd5b506100f1610289565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34801561012657600080fd5b50d3801561013357600080fd5b50d2801561014057600080fd5b5061006b61014f3660046109a1565b6102de565b34801561016057600080fd5b50d3801561016d57600080fd5b50d2801561017a57600080fd5b506100f1610322565b61018b6103af565b61019b61019661049d565b6104a7565b565b6101a56104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101f6576101f38160405180602001604052806000815250600061050b565b50565b6101f3610183565b6102066104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102815761027c8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061050b915050565b505050565b61027c610183565b60006102936104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102d3576102ce61049d565b905090565b6102db610183565b90565b6102e66104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101f6576101f381610536565b600061032c6104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102d3576102ce6104cb565b606061038c8383604051806060016040528060278152602001610ad960279139610597565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6103b76104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561019b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006102ce6106bf565b3660008037600080366000845af43d6000803e8080156104c6573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b610514836106e7565b6000825111806105215750805b1561027c576105308383610367565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61055f6104cb565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101f381610734565b606073ffffffffffffffffffffffffffffffffffffffff84163b61063d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610494565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516106659190610a6b565b600060405180830381855af49150503d80600081146106a0576040519150601f19603f3d011682016040523d82523d6000602084013e6106a5565b606091505b50915091506106b5828286610840565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104ef565b6106f081610893565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff81166107d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610494565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6060831561084f57508161038c565b82511561085f5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104949190610a87565b73ffffffffffffffffffffffffffffffffffffffff81163b610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610494565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6107fa565b6000813574ffffffffffffffffffffffffffffffffffffffffff8116811461098557600080fd5b73ffffffffffffffffffffffffffffffffffffffff1692915050565b6000602082840312156109b357600080fd5b61038c8261095e565b6000806000604084860312156109d157600080fd5b6109da8461095e565b9250602084013567ffffffffffffffff808211156109f757600080fd5b818601915086601f830112610a0b57600080fd5b813581811115610a1a57600080fd5b876020828501011115610a2c57600080fd5b6020830194508093505050509250925092565b60005b83811015610a5a578181015183820152602001610a42565b838111156105305750506000910152565b60008251610a7d818460208701610a3f565b9190910192915050565b6020815260008251806020840152610aa6816040850160208701610a3f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26474726f6e5822122053e24b5d5fe72efd64d4b8b388e579b4e5593fafbf177689150dabba91bbe6ff64736f6c634300080b0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", - "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100c25780638f2839701461011a578063f851a440146101545761006d565b80633659cfe6146100755780634f1ef286146100af5761006d565b3661006d5761006b610183565b005b61006b610183565b34801561008157600080fd5b50d3801561008e57600080fd5b50d2801561009b57600080fd5b5061006b6100aa3660046109a1565b61019d565b61006b6100bd3660046109bc565b6101fe565b3480156100ce57600080fd5b50d380156100db57600080fd5b50d280156100e857600080fd5b506100f1610289565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34801561012657600080fd5b50d3801561013357600080fd5b50d2801561014057600080fd5b5061006b61014f3660046109a1565b6102de565b34801561016057600080fd5b50d3801561016d57600080fd5b50d2801561017a57600080fd5b506100f1610322565b61018b6103af565b61019b61019661049d565b6104a7565b565b6101a56104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101f6576101f38160405180602001604052806000815250600061050b565b50565b6101f3610183565b6102066104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102815761027c8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061050b915050565b505050565b61027c610183565b60006102936104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102d3576102ce61049d565b905090565b6102db610183565b90565b6102e66104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101f6576101f381610536565b600061032c6104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102d3576102ce6104cb565b606061038c8383604051806060016040528060278152602001610ad960279139610597565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6103b76104cb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561019b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006102ce6106bf565b3660008037600080366000845af43d6000803e8080156104c6573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b610514836106e7565b6000825111806105215750805b1561027c576105308383610367565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61055f6104cb565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a16101f381610734565b606073ffffffffffffffffffffffffffffffffffffffff84163b61063d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610494565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516106659190610a6b565b600060405180830381855af49150503d80600081146106a0576040519150601f19603f3d011682016040523d82523d6000602084013e6106a5565b606091505b50915091506106b5828286610840565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6104ef565b6106f081610893565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff81166107d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610494565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b6060831561084f57508161038c565b82511561085f5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104949190610a87565b73ffffffffffffffffffffffffffffffffffffffff81163b610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610494565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6107fa565b6000813574ffffffffffffffffffffffffffffffffffffffffff8116811461098557600080fd5b73ffffffffffffffffffffffffffffffffffffffff1692915050565b6000602082840312156109b357600080fd5b61038c8261095e565b6000806000604084860312156109d157600080fd5b6109da8461095e565b9250602084013567ffffffffffffffff808211156109f757600080fd5b818601915086601f830112610a0b57600080fd5b813581811115610a1a57600080fd5b876020828501011115610a2c57600080fd5b6020830194508093505050509250925092565b60005b83811015610a5a578181015183820152602001610a42565b838111156105305750506000910152565b60008251610a7d818460208701610a3f565b9190910192915050565b6020815260008251806020840152610aa6816040850160208701610a3f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26474726f6e5822122053e24b5d5fe72efd64d4b8b388e579b4e5593fafbf177689150dabba91bbe6ff64736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", - "kind": "dev", - "methods": { - "admin()": { - "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" - }, - "changeAdmin(address)": { - "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." - }, - "constructor": { - "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." - }, - "implementation()": { - "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_1827": { - "entryPoint": null, - "id": 1827, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_2568": { - "entryPoint": null, - "id": 2568, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_changeAdmin_2061": { - "entryPoint": 292, - "id": 2061, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_getAdmin_2018": { - "entryPoint": 496, - "id": 2018, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setAdmin_2044": { - "entryPoint": 553, - "id": 2044, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setImplementation_1896": { - "entryPoint": 734, - "id": 1896, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeToAndCall_1941": { - "entryPoint": 231, - "id": 1941, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_upgradeTo_1911": { - "entryPoint": 383, - "id": 1911, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@functionDelegateCall_3109": { - "entryPoint": 449, - "id": 3109, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_3144": { - "entryPoint": 897, - "id": 3144, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_3224": { - "entryPoint": 1127, - "id": 3224, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@isContract_2899": { - "entryPoint": 1130, - "id": 2899, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@verifyCallResult_3175": { - "entryPoint": 1145, - "id": 3175, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 1207, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory": { - "entryPoint": 1318, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 1602, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 1632, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_sub_t_uint256": { - "entryPoint": 1542, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 1271, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "panic_error_0x01": { - "entryPoint": 1580, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1249, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4270:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:178:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "84:28:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "105:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "99:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "99:13:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "88:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "179:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "188:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "191:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "181:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "181:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "181:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "134:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "147:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "164:3:37", - "type": "", - "value": "168" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "169:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "160:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "160:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "173:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "156:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "156:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "143:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "143:33:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "131:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "131:46:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "124:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "124:54:37" - }, - "nodeType": "YulIf", - "src": "121:74:37" - }, - { - "nodeType": "YulAssignment", - "src": "204:42:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "217:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "234:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "239:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "230:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "230:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "226:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "226:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "213:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "213:33:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "204:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:37", - "type": "" - } - ], - "src": "14:238:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "289:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "306:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "313:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "318:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "309:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "309:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "299:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "299:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "299:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "346:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "349:4:37", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "339:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "339:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "339:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "370:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "373:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "363:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "363:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "363:15:37" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "257:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "442:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "452:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "461:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "456:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "521:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "546:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "551:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "542:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "542:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "565:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "570:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "561:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "561:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "555:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "555:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "535:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "535:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "535:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "482:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "485:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "479:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "479:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "493:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "495:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "504:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "507:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "500:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "500:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "495:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "475:3:37", - "statements": [] - }, - "src": "471:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "623:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "628:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "619:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "619:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "637:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "612:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "612:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "612:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "599:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "602:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "596:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "596:13:37" - }, - "nodeType": "YulIf", - "src": "593:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "420:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "425:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "430:6:37", - "type": "" - } - ], - "src": "389:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "776:929:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "822:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "831:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "834:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "824:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "824:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "824:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "797:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "806:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "793:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "793:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "818:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "789:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "789:32:37" - }, - "nodeType": "YulIf", - "src": "786:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "847:50:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "887:9:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "857:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "857:40:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "847:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "906:59:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "950:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "961:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "946:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "946:18:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "916:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "916:49:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "906:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "974:39:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "998:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1009:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "994:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "994:18:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "988:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "988:25:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "978:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1022:28:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1040:2:37", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1044:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1036:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1036:10:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1048:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1032:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1032:18:37" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "1026:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1077:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1086:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1089:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1079:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1079:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1079:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1065:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1073:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1062:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1062:14:37" - }, - "nodeType": "YulIf", - "src": "1059:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1102:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1116:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1127:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1112:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1112:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "1106:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1182:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1191:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1194:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1184:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1184:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1184:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1161:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1165:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1157:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1157:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1172:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "1153:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1153:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1146:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1146:35:37" - }, - "nodeType": "YulIf", - "src": "1143:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1207:19:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1223:2:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1217:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1217:9:37" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "1211:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1249:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1251:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1251:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1251:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1241:2:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1245:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1238:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1238:10:37" - }, - "nodeType": "YulIf", - "src": "1235:36:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1280:17:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1294:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "1290:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1290:7:37" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "1284:2:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1306:23:37", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1326:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1320:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "1320:9:37" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1310:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1338:71:37", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1360:6:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1384:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1388:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1380:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1380:13:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1395:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1376:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1376:22:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1400:2:37", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1372:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1372:31:37" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1405:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1368:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1368:40:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1356:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1356:53:37" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1342:10:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1468:22:37", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1470:16:37" - }, - "nodeType": "YulFunctionCall", - "src": "1470:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1470:18:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1427:10:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1439:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1424:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1424:18:37" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1447:10:37" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1459:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1444:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1444:22:37" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1421:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1421:46:37" - }, - "nodeType": "YulIf", - "src": "1418:72:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1506:2:37", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1510:10:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1499:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1499:22:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1499:22:37" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1537:6:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1545:2:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1530:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1530:18:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1530:18:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1594:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1603:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1606:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1596:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1596:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1596:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1571:2:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1575:2:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1567:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1567:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1580:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1563:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1563:20:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1585:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1560:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1560:33:37" - }, - "nodeType": "YulIf", - "src": "1557:53:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1645:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1649:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1641:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1641:11:37" - }, - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1658:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1666:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1654:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1654:15:37" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1671:2:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "1619:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "1619:55:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1619:55:37" - }, - { - "nodeType": "YulAssignment", - "src": "1683:16:37", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1693:6:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1683:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "726:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "737:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "749:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "757:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "765:6:37", - "type": "" - } - ], - "src": "652:1053:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1759:173:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1789:111:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1810:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1817:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1822:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1813:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1813:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1803:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1803:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1803:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1854:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1857:4:37", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1847:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1847:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1847:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1882:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1885:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1875:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1875:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1875:15:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1775:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1778:1:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1772:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1772:8:37" - }, - "nodeType": "YulIf", - "src": "1769:131:37" - }, - { - "nodeType": "YulAssignment", - "src": "1909:17:37", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1921:1:37" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1924:1:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1917:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1917:9:37" - }, - "variableNames": [ - { - "name": "diff", - "nodeType": "YulIdentifier", - "src": "1909:4:37" - } - ] - } - ] - }, - "name": "checked_sub_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "1741:1:37", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "1744:1:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nodeType": "YulTypedName", - "src": "1750:4:37", - "type": "" - } - ], - "src": "1710:222:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1969:95:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1986:1:37", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1993:3:37", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1998:10:37", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "1989:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1989:20:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1979:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1979:31:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1979:31:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2026:1:37", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2029:4:37", - "type": "", - "value": "0x01" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2019:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2019:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2019:15:37" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2050:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2053:4:37", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2043:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2043:15:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2043:15:37" - } - ] - }, - "name": "panic_error_0x01", - "nodeType": "YulFunctionDefinition", - "src": "1937:127:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2198:175:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2208:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2220:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2231:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2216:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2216:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2208:4:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2243:29:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2261:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2266:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "2257:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2257:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2270:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2253:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2253:19:37" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2247:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2288:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2303:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2311:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2299:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2299:15:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2281:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2281:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2281:34:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2335:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2346:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2331:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2331:18:37" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2355:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2363:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2351:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2351:15:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2324:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2324:43:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2324:43:37" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2159:9:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "2170:6:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2178:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2189:4:37", - "type": "" - } - ], - "src": "2069:304:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2552:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2569:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2580:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2562:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2562:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2562:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2603:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2614:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2599:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2599:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2619:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2592:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2592:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2592:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2642:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2653:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2638:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2638:18:37" - }, - { - "hexValue": "455243313936373a206e65772061646d696e20697320746865207a65726f2061", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2658:34:37", - "type": "", - "value": "ERC1967: new admin is the zero a" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2631:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2631:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2631:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2713:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2724:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2709:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2709:18:37" - }, - { - "hexValue": "646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2729:8:37", - "type": "", - "value": "ddress" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2702:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2702:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2702:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "2747:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2759:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2770:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2755:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2755:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2747:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2529:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2543:4:37", - "type": "" - } - ], - "src": "2378:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2959:235:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2976:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2987:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2969:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2969:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2969:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3010:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3021:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3006:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3006:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3026:2:37", - "type": "", - "value": "45" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2999:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2999:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2999:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3049:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3060:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3045:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3045:18:37" - }, - { - "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3065:34:37", - "type": "", - "value": "ERC1967: new implementation is n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3038:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3038:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3038:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3120:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3131:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3116:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3116:18:37" - }, - { - "hexValue": "6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3136:15:37", - "type": "", - "value": "ot a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3109:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3109:43:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3109:43:37" - }, - { - "nodeType": "YulAssignment", - "src": "3161:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3173:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3184:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3169:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3169:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3161:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2936:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2950:4:37", - "type": "" - } - ], - "src": "2785:409:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3373:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3390:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3401:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3383:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3383:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3383:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3424:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3435:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3420:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3420:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3440:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3413:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3413:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3413:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3463:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3474:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3459:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3459:18:37" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3479:34:37", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3452:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3452:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3452:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3534:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3545:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3530:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3530:18:37" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3550:8:37", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3523:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3523:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3523:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "3568:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3580:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3591:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3576:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3576:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3568:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3350:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3364:4:37", - "type": "" - } - ], - "src": "3199:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3743:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3753:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3773:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3767:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3767:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3757:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3815:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3823:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3811:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3811:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3830:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3835:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3789:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "3789:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3789:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "3851:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3862:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3867:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3858:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3858:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3851:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3719:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3724:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3735:3:37", - "type": "" - } - ], - "src": "3606:274:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4006:262:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4023:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4034:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4016:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4016:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4016:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4046:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4066:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4060:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "4060:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "4050:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4093:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4104:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4089:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4089:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4109:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4082:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4082:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4082:34:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4151:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4159:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4147:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4147:15:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4168:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4179:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4164:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4164:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4184:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "4125:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "4125:66:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4125:66:37" - }, - { - "nodeType": "YulAssignment", - "src": "4200:62:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4216:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4235:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4243:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4231:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4231:15:37" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4252:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "4248:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4248:7:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4227:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4227:29:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4212:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4212:45:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4259:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4208:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4208:54:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4200:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3975:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3986:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3997:4:37", - "type": "" - } - ], - "src": "3885:383:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n let value_1 := mload(offset)\n if iszero(eq(value_1, and(value_1, sub(shl(168, 1), 1)))) { revert(0, 0) }\n value := and(value_1, sub(shl(160, 1), 1))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_decode_tuple_t_addresst_addresst_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n let offset := mload(add(headStart, 64))\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := mload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory(add(_2, 32), add(memPtr, 32), _3)\n value2 := memPtr\n }\n function checked_sub_t_uint256(x, y) -> diff\n {\n if lt(x, y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n diff := sub(x, y)\n }\n function panic_error_0x01()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x01)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"ERC1967: new admin is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 45)\n mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n mstore(add(headStart, 96), \"ot a contract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD PUSH3 0x1241 CODESIZE SUB DUP1 PUSH3 0x1241 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x26 SWAP2 PUSH3 0x526 JUMP JUMPDEST DUP3 DUP2 PUSH3 0x55 PUSH1 0x1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBD PUSH3 0x606 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x11FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0x75 JUMPI PUSH3 0x75 PUSH3 0x62C JUMP JUMPDEST PUSH3 0x83 DUP3 DUP3 PUSH1 0x0 PUSH3 0xE7 JUMP JUMPDEST POP PUSH3 0xB3 SWAP1 POP PUSH1 0x1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6104 PUSH3 0x606 JUMP JUMPDEST PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x11DA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE EQ PUSH3 0xD3 JUMPI PUSH3 0xD3 PUSH3 0x62C JUMP JUMPDEST PUSH3 0xDE DUP3 PUSH3 0x124 JUMP JUMPDEST POP POP POP PUSH3 0x695 JUMP JUMPDEST PUSH3 0xF2 DUP4 PUSH3 0x17F JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH3 0x100 JUMPI POP DUP1 JUMPDEST ISZERO PUSH3 0x11F JUMPI PUSH3 0x11D DUP4 DUP4 PUSH3 0x1C1 PUSH1 0x20 SHL PUSH3 0x367 OR PUSH1 0x20 SHR JUMP JUMPDEST POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH3 0x14F PUSH3 0x1F0 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH3 0x17C DUP2 PUSH3 0x229 JUMP JUMPDEST POP JUMP JUMPDEST PUSH3 0x18A DUP2 PUSH3 0x2DE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x60 PUSH3 0x1E9 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH3 0x121A PUSH1 0x27 SWAP2 CODECOPY PUSH3 0x381 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x21A PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x11DA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x467 PUSH1 0x20 SHL PUSH3 0x2DB OR PUSH1 0x20 SHR JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x294 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x646472657373 PUSH1 0xD0 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH3 0x2BD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x11DA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x467 PUSH1 0x20 SHL PUSH3 0x2DB OR PUSH1 0x20 SHR JUMP JUMPDEST DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH3 0x2F4 DUP2 PUSH3 0x46A PUSH1 0x20 SHL PUSH3 0x393 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x358 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH13 0x1BDD08184818DBDB9D1C9858DD PUSH1 0x9A SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x28B JUMP JUMPDEST DUP1 PUSH3 0x2BD PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x11FA DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE PUSH1 0x0 SHL PUSH3 0x467 PUSH1 0x20 SHL PUSH3 0x2DB OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE PUSH3 0x3EB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1B9D1C9858DD PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH3 0x28B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 PUSH1 0x40 MLOAD PUSH3 0x408 SWAP2 SWAP1 PUSH3 0x642 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x445 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x44A JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH3 0x45D DUP3 DUP3 DUP7 PUSH3 0x479 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH3 0x48A JUMPI POP DUP2 PUSH3 0x1E9 JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH3 0x49B JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x28B SWAP2 SWAP1 PUSH3 0x660 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x4D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x514 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x4FA JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH3 0x11D JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x53C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x547 DUP5 PUSH3 0x4B7 JUMP JUMPDEST SWAP3 POP PUSH3 0x557 PUSH1 0x20 DUP6 ADD PUSH3 0x4B7 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP1 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x575 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x58A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH3 0x59F JUMPI PUSH3 0x59F PUSH3 0x4E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP4 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x5CA JUMPI PUSH3 0x5CA PUSH3 0x4E1 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP3 DUP2 MSTORE DUP10 PUSH1 0x20 DUP5 DUP8 ADD ADD GT ISZERO PUSH3 0x5E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x5F7 DUP4 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP9 ADD PUSH3 0x4F7 JUMP JUMPDEST DUP1 SWAP6 POP POP POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH3 0x627 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH3 0x656 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH3 0x4F7 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH3 0x681 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH3 0x4F7 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xB35 DUP1 PUSH3 0x6A5 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0xC2 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x154 JUMPI PUSH2 0x6D JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x75 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0xAF JUMPI PUSH2 0x6D JUMP JUMPDEST CALLDATASIZE PUSH2 0x6D JUMPI PUSH2 0x6B PUSH2 0x183 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x6B PUSH2 0x183 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B PUSH2 0xAA CALLDATASIZE PUSH1 0x4 PUSH2 0x9A1 JUMP JUMPDEST PUSH2 0x19D JUMP JUMPDEST PUSH2 0x6B PUSH2 0xBD CALLDATASIZE PUSH1 0x4 PUSH2 0x9BC JUMP JUMPDEST PUSH2 0x1FE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0xE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF1 PUSH2 0x289 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x9A1 JUMP JUMPDEST PUSH2 0x2DE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x160 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF1 PUSH2 0x322 JUMP JUMPDEST PUSH2 0x18B PUSH2 0x3AF JUMP JUMPDEST PUSH2 0x19B PUSH2 0x196 PUSH2 0x49D JUMP JUMPDEST PUSH2 0x4A7 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x1A5 PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1F6 JUMPI PUSH2 0x1F3 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x50B JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1F3 PUSH2 0x183 JUMP JUMPDEST PUSH2 0x206 PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x281 JUMPI PUSH2 0x27C DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x50B SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x27C PUSH2 0x183 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x293 PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2D3 JUMPI PUSH2 0x2CE PUSH2 0x49D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x2DB PUSH2 0x183 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x2E6 PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1F6 JUMPI PUSH2 0x1F3 DUP2 PUSH2 0x536 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32C PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2D3 JUMPI PUSH2 0x2CE PUSH2 0x4CB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x38C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAD9 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x597 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x19B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x42 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x6574000000000000000000000000000000000000000000000000000000000000 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2CE PUSH2 0x6BF JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x4C6 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x514 DUP4 PUSH2 0x6E7 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x521 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x27C JUMPI PUSH2 0x530 DUP4 DUP4 PUSH2 0x367 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x55F PUSH2 0x4CB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1F3 DUP2 PUSH2 0x734 JUMP JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x63D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x494 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x665 SWAP2 SWAP1 PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6A0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6A5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x6B5 DUP3 DUP3 DUP7 PUSH2 0x840 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x4EF JUMP JUMPDEST PUSH2 0x6F0 DUP2 PUSH2 0x893 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x7D7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x494 JUMP JUMPDEST DUP1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x84F JUMPI POP DUP2 PUSH2 0x38C JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x85F JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x494 SWAP2 SWAP1 PUSH2 0xA87 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x937 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74206120636F6E747261637400000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x494 JUMP JUMPDEST DUP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x7FA JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x985 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x38C DUP3 PUSH2 0x95E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x9D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9DA DUP5 PUSH2 0x95E JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x9F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xA1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xA2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA5A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xA42 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x530 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xA7D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xA3F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xAA6 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xA3F JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH21 0x726F6E5822122053E24B5D5FE72EFD64D4B8B388E5 PUSH26 0xB4E5593FAFBF177689150DABBA91BBE6FF64736F6C634300080B STOP CALLER 0xB5 BALANCE 0x27 PUSH9 0x4A568B3173AE13B9F8 0xA6 ADD PUSH15 0x243E63B6E8EE1178D6A717850B5D61 SUB CALLDATASIZE ADDMOD SWAP5 LOG1 EXTCODESIZE LOG1 LOG3 0x21 MOD PUSH8 0xC828492DB98DCA3E KECCAK256 PUSH23 0xCC3735A920A3CA505D382BBC416464726573733A206C6F PUSH24 0x2D6C6576656C2064656C65676174652063616C6C20666169 PUSH13 0x65640000000000000000000000 ", - "sourceMap": "1634:3556:22:-:0;;;1908:254;;;;;;;;;;;;;;;;;;:::i;:::-;2023:6;2031:5;1050:54:15;1103:1;1058:41;1050:54;:::i;:::-;-1:-1:-1;;;;;;;;;;;1018:87:15;1011:95;;;;:::i;:::-;1116:39;1134:6;1142:5;1149;1116:17;:39::i;:::-;-1:-1:-1;2078:45:22::1;::::0;-1:-1:-1;2122:1:22::1;2086:32;2078:45;:::i;:::-;-1:-1:-1::0;;;;;;;;;;;2055:69:22::1;2048:77;;;;:::i;:::-;2135:20;2148:6:::0;2135:12:::1;:20::i;:::-;1908:254:::0;;;1634:3556;;2188:295:16;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;;;;;:53;;:::i;:::-;;2365:112;2188:295;;;:::o;4637:135::-;4701:35;4714:11;:9;:11::i;:::-;4701:35;;;-1:-1:-1;;;;;2299:15:37;;;2281:34;;2351:15;;;2346:2;2331:18;;2324:43;2216:18;4701:35:16;;;;;;;4746:19;4756:8;4746:9;:19::i;:::-;4637:135;:::o;1902:152::-;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;-1:-1:-1;;;;;2020:27:16;;;;;;;;1902:152;:::o;6575:198:25:-;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:25:o;4113:130:16:-;4165:7;4191:39;-1:-1:-1;;;;;;;;;;;4218:11:16;;4191:26;;;;;:39;;:::i;:::-;:45;-1:-1:-1;;;;;4191:45:16;;4113:130;-1:-1:-1;4113:130:16:o;4325:201::-;-1:-1:-1;;;;;4388:22:16;;4380:73;;;;-1:-1:-1;;;4380:73:16;;2580:2:37;4380:73:16;;;2562:21:37;2619:2;2599:18;;;2592:30;2658:34;2638:18;;;2631:62;-1:-1:-1;;;2709:18:37;;;2702:36;2755:19;;4380:73:16;;;;;;;;;4511:8;4463:39;-1:-1:-1;;;;;;;;;;;4490:11:16;;4463:26;;;;;:39;;:::i;:::-;:56;;-1:-1:-1;;;;;;4463:56:16;-1:-1:-1;;;;;4463:56:16;;;;;;;;;;-1:-1:-1;4325:201:16:o;1537:259::-;1618:37;1637:17;1618:18;;;;;:37;;:::i;:::-;1610:95;;;;-1:-1:-1;;;1610:95:16;;2987:2:37;1610:95:16;;;2969:21:37;3026:2;3006:18;;;2999:30;3065:34;3045:18;;;3038:62;-1:-1:-1;;;3116:18:37;;;3109:43;3169:19;;1610:95:16;2785:409:37;1610:95:16;1772:17;1715:48;-1:-1:-1;;;;;;;;;;;1742:20:16;;1715:26;;;;;:48;;:::i;6959:387:25:-;7100:12;-1:-1:-1;;;;;1470:19:25;;;7124:69;;;;-1:-1:-1;;;7124:69:25;;3401:2:37;7124:69:25;;;3383:21:37;3440:2;3420:18;;;3413:30;3479:34;3459:18;;;3452:62;-1:-1:-1;;;3530:18:37;;;3523:36;3576:19;;7124:69:25;3199:402:37;7124:69:25;7205:12;7219:23;7246:6;-1:-1:-1;;;;;7246:19:25;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7204:67:25;;-1:-1:-1;7204:67:25;-1:-1:-1;7288:51:25;7204:67;;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:25:o;1599:147:27:-;1726:4;1599:147::o;1180:320:25:-;-1:-1:-1;;;;;1470:19:25;;:23;;;1180:320::o;7566:692::-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:25;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;-1:-1:-1;;;8207:20:25;;;;;;;;:::i;14:238:37:-;99:13;;64:5;;-1:-1:-1;;;;;143:33:37;;131:46;;121:74;;191:1;188;181:12;121:74;-1:-1:-1;;;;;213:33:37;;14:238;-1:-1:-1;;14:238:37:o;257:127::-;318:10;313:3;309:20;306:1;299:31;349:4;346:1;339:15;373:4;370:1;363:15;389:258;461:1;471:113;485:6;482:1;479:13;471:113;;;561:11;;;555:18;542:11;;;535:39;507:2;500:10;471:113;;;602:6;599:1;596:13;593:48;;;-1:-1:-1;;637:1:37;619:16;;612:27;389:258::o;652:1053::-;749:6;757;765;818:2;806:9;797:7;793:23;789:32;786:52;;;834:1;831;824:12;786:52;857:40;887:9;857:40;:::i;:::-;847:50;;916:49;961:2;950:9;946:18;916:49;:::i;:::-;1009:2;994:18;;988:25;906:59;;-1:-1:-1;;;;;;1062:14:37;;;1059:34;;;1089:1;1086;1079:12;1059:34;1127:6;1116:9;1112:22;1102:32;;1172:7;1165:4;1161:2;1157:13;1153:27;1143:55;;1194:1;1191;1184:12;1143:55;1223:2;1217:9;1245:2;1241;1238:10;1235:36;;;1251:18;;:::i;:::-;1326:2;1320:9;1294:2;1380:13;;-1:-1:-1;;1376:22:37;;;1400:2;1372:31;1368:40;1356:53;;;1424:18;;;1444:22;;;1421:46;1418:72;;;1470:18;;:::i;:::-;1510:10;1506:2;1499:22;1545:2;1537:6;1530:18;1585:7;1580:2;1575;1571;1567:11;1563:20;1560:33;1557:53;;;1606:1;1603;1596:12;1557:53;1619:55;1671:2;1666;1658:6;1654:15;1649:2;1645;1641:11;1619:55;:::i;:::-;1693:6;1683:16;;;;;;;652:1053;;;;;:::o;1710:222::-;1750:4;1778:1;1775;1772:8;1769:131;;;1822:10;1817:3;1813:20;1810:1;1803:31;1857:4;1854:1;1847:15;1885:4;1882:1;1875:15;1769:131;-1:-1:-1;1917:9:37;;1710:222::o;1937:127::-;1998:10;1993:3;1989:20;1986:1;1979:31;2029:4;2026:1;2019:15;2053:4;2050:1;2043:15;3606:274;3735:3;3773:6;3767:13;3789:53;3835:6;3830:3;3823:4;3815:6;3811:17;3789:53;:::i;:::-;3858:16;;;;;3606:274;-1:-1:-1;;3606:274:37:o;3885:383::-;4034:2;4023:9;4016:21;3997:4;4066:6;4060:13;4109:6;4104:2;4093:9;4089:18;4082:34;4125:66;4184:6;4179:2;4168:9;4164:18;4159:2;4151:6;4147:15;4125:66;:::i;:::-;4252:2;4231:15;-1:-1:-1;;4227:29:37;4212:45;;;;4259:2;4208:54;;3885:383;-1:-1:-1;;3885:383:37:o;:::-;1634:3556:22;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_2196": { - "entryPoint": null, - "id": 2196, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_2204": { - "entryPoint": null, - "id": 2204, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_2209": { - "entryPoint": null, - "id": 2209, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_beforeFallback_2690": { - "entryPoint": 943, - "id": 2690, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_changeAdmin_2061": { - "entryPoint": 1334, - "id": 2061, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_delegate_2169": { - "entryPoint": 1191, - "id": 2169, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_fallback_2188": { - "entryPoint": 387, - "id": 2188, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_getAdmin_2018": { - "entryPoint": 1227, - "id": 2018, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_getImplementation_1872": { - "entryPoint": 1727, - "id": 1872, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_implementation_1839": { - "entryPoint": 1181, - "id": 1839, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setAdmin_2044": { - "entryPoint": 1844, - "id": 2044, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setImplementation_1896": { - "entryPoint": 2195, - "id": 1896, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_upgradeToAndCall_1941": { - "entryPoint": 1291, - "id": 1941, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_upgradeTo_1911": { - "entryPoint": 1767, - "id": 1911, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@admin_2598": { - "entryPoint": 802, - "id": 2598, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@changeAdmin_2625": { - "entryPoint": 734, - "id": 2625, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@functionDelegateCall_3109": { - "entryPoint": 871, - "id": 3109, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@functionDelegateCall_3144": { - "entryPoint": 1431, - "id": 3144, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@getAddressSlot_3224": { - "entryPoint": null, - "id": 3224, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@implementation_2612": { - "entryPoint": 649, - "id": 2612, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@isContract_2899": { - "entryPoint": 915, - "id": 2899, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@upgradeToAndCall_2660": { - "entryPoint": 510, - "id": 2660, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@upgradeTo_2643": { - "entryPoint": 413, - "id": 2643, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@verifyCallResult_3175": { - "entryPoint": 2112, - "id": 3175, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_address": { - "entryPoint": 2398, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 2465, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_bytes_calldata_ptr": { - "entryPoint": 2492, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 2667, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 2695, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "copy_memory_to_memory": { - "entryPoint": 2623, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:4414:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "63:233:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "73:35:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "101:6:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "88:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "88:20:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "77:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "200:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "209:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "212:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "202:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "202:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "202:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "130:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "143:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "152:44:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "139:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "139:58:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "127:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "127:71:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "120:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "120:79:37" - }, - "nodeType": "YulIf", - "src": "117:99:37" - }, - { - "nodeType": "YulAssignment", - "src": "225:65:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "238:7:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "247:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "234:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "234:56:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "225:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "42:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:37", - "type": "" - } - ], - "src": "14:282:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "371:116:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "417:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "426:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "429:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "419:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "419:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "419:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "392:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "401:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "388:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "388:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "413:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "384:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "384:32:37" - }, - "nodeType": "YulIf", - "src": "381:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "442:39:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "471:9:37" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "452:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "452:29:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "442:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "337:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "348:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "360:6:37", - "type": "" - } - ], - "src": "301:186:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "598:559:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "644:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "653:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "656:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "646:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "646:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "646:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "619:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "628:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "615:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "615:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "640:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "611:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "611:32:37" - }, - "nodeType": "YulIf", - "src": "608:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "669:39:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "698:9:37" - } - ], - "functionName": { - "name": "abi_decode_address", - "nodeType": "YulIdentifier", - "src": "679:18:37" - }, - "nodeType": "YulFunctionCall", - "src": "679:29:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "669:6:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "717:46:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "748:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "759:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "744:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "744:18:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "731:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "731:32:37" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "721:6:37", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "772:28:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "782:18:37", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "776:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "827:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "836:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "839:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "829:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "829:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "829:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "815:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "823:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "812:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "812:14:37" - }, - "nodeType": "YulIf", - "src": "809:34:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "852:32:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "866:9:37" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "877:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "862:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "862:22:37" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "856:2:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "932:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "941:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "944:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "934:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "934:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "934:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "911:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "915:4:37", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "907:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "907:13:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "922:7:37" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "903:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "903:27:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "896:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "896:35:37" - }, - "nodeType": "YulIf", - "src": "893:55:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "957:30:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "984:2:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "971:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "971:16:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "961:6:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1014:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1023:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1026:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1016:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1016:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1016:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1002:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1010:2:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "999:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "999:14:37" - }, - "nodeType": "YulIf", - "src": "996:34:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1080:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1089:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1092:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1082:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1082:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1082:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1053:2:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1057:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1049:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1049:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1066:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1045:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1045:24:37" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1071:7:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1042:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "1042:37:37" - }, - "nodeType": "YulIf", - "src": "1039:57:37" - }, - { - "nodeType": "YulAssignment", - "src": "1105:21:37", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1119:2:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1123:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1115:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1115:11:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1105:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1135:16:37", - "value": { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1145:6:37" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "1135:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_calldata_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "548:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "559:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "571:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "579:6:37", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "587:6:37", - "type": "" - } - ], - "src": "492:665:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1263:125:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1273:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1285:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1296:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1281:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1281:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1273:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1315:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1330:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1338:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1326:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1326:55:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1308:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1308:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1308:74:37" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1232:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1243:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1254:4:37", - "type": "" - } - ], - "src": "1162:226:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1567:296:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1584:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1595:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1577:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1577:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1577:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1618:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1629:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1614:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1614:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1634:2:37", - "type": "", - "value": "66" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1607:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1607:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1607:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1657:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1668:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1653:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1653:18:37" - }, - { - "hexValue": "5472616e73706172656e745570677261646561626c6550726f78793a2061646d", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1673:34:37", - "type": "", - "value": "TransparentUpgradeableProxy: adm" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1646:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1646:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1646:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1728:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1739:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1724:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1724:18:37" - }, - { - "hexValue": "696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1744:34:37", - "type": "", - "value": "in cannot fallback to proxy targ" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1717:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1717:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1717:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1799:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1810:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1795:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1795:19:37" - }, - { - "hexValue": "6574", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1816:4:37", - "type": "", - "value": "et" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1788:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1788:33:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1788:33:37" - }, - { - "nodeType": "YulAssignment", - "src": "1830:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1842:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1853:3:37", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1838:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1838:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1830:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1544:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1558:4:37", - "type": "" - } - ], - "src": "1393:470:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1997:198:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2007:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2019:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2030:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2015:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2015:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2007:4:37" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2042:52:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2052:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "2046:2:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2110:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2125:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2133:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2121:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2121:15:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2103:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2103:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2103:34:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2157:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2168:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2153:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2153:18:37" - }, - { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2177:6:37" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "2185:2:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2173:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2173:15:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2146:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2146:43:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2146:43:37" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1958:9:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1969:6:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1977:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1988:4:37", - "type": "" - } - ], - "src": "1868:327:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2374:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2391:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2402:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2384:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2384:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2384:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2425:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2436:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2421:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2421:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2441:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2414:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2414:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2414:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2464:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2475:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2460:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2460:18:37" - }, - { - "hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2480:34:37", - "type": "", - "value": "Address: delegate call to non-co" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2453:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2453:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2453:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2535:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2546:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2531:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2531:18:37" - }, - { - "hexValue": "6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2551:8:37", - "type": "", - "value": "ntract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2524:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2524:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2524:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "2569:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2581:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2592:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2577:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2577:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2569:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2351:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2365:4:37", - "type": "" - } - ], - "src": "2200:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2660:205:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2670:10:37", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2679:1:37", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "2674:1:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2739:63:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2764:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2769:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2760:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2760:11:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2783:3:37" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2788:1:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2779:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2779:11:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2773:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "2773:18:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2753:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2753:39:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2753:39:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2700:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2703:6:37" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2697:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2697:13:37" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2711:19:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2713:15:37", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2722:1:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2725:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2718:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2718:10:37" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2713:1:37" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2693:3:37", - "statements": [] - }, - "src": "2689:113:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2828:31:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2841:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2846:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2837:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "2837:16:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2855:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2830:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "2830:27:37" - }, - "nodeType": "YulExpressionStatement", - "src": "2830:27:37" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "2817:1:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2820:6:37" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2814:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "2814:13:37" - }, - "nodeType": "YulIf", - "src": "2811:48:37" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "2638:3:37", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "2643:3:37", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2648:6:37", - "type": "" - } - ], - "src": "2607:258:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3007:137:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3017:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3037:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3031:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3031:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3021:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3079:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3087:4:37", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3075:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3075:17:37" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3094:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3099:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3053:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "3053:53:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3053:53:37" - }, - { - "nodeType": "YulAssignment", - "src": "3115:23:37", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3126:3:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3131:6:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3122:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3122:16:37" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3115:3:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2983:3:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2988:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2999:3:37", - "type": "" - } - ], - "src": "2870:274:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3323:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3340:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3351:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3333:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3333:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3333:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3374:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3385:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3370:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3370:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3390:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3363:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3363:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3363:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3413:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3424:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3409:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3409:18:37" - }, - { - "hexValue": "455243313936373a206e65772061646d696e20697320746865207a65726f2061", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3429:34:37", - "type": "", - "value": "ERC1967: new admin is the zero a" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3402:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3402:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3402:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3484:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3495:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3480:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3480:18:37" - }, - { - "hexValue": "646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3500:8:37", - "type": "", - "value": "ddress" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3473:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3473:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3473:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "3518:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3530:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3541:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3526:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3526:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3518:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3300:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3314:4:37", - "type": "" - } - ], - "src": "3149:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3677:321:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3694:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3705:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3687:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3687:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3687:21:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3717:27:37", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3737:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3731:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "3731:13:37" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3721:6:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3764:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3775:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3760:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3760:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3780:6:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3753:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "3753:34:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3753:34:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3822:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3830:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3818:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3818:15:37" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3839:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3850:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3835:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3835:18:37" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3855:6:37" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "3796:21:37" - }, - "nodeType": "YulFunctionCall", - "src": "3796:66:37" - }, - "nodeType": "YulExpressionStatement", - "src": "3796:66:37" - }, - { - "nodeType": "YulAssignment", - "src": "3871:121:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3887:9:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3906:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3914:2:37", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3902:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3902:15:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3919:66:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "3898:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3898:88:37" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3883:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3883:104:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3989:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3879:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "3879:113:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3871:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3646:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3657:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3668:4:37", - "type": "" - } - ], - "src": "3556:442:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4177:235:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4194:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4205:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4187:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4187:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4187:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4228:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4239:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4224:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4224:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4244:2:37", - "type": "", - "value": "45" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4217:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4217:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4217:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4267:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4278:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4263:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4263:18:37" - }, - { - "hexValue": "455243313936373a206e657720696d706c656d656e746174696f6e206973206e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4283:34:37", - "type": "", - "value": "ERC1967: new implementation is n" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4256:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4256:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4256:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4338:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4349:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4334:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4334:18:37" - }, - { - "hexValue": "6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4354:15:37", - "type": "", - "value": "ot a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4327:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "4327:43:37" - }, - "nodeType": "YulExpressionStatement", - "src": "4327:43:37" - }, - { - "nodeType": "YulAssignment", - "src": "4379:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4391:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4402:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4387:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "4387:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4379:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4154:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4168:4:37", - "type": "" - } - ], - "src": "4003:409:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address(offset) -> value\n {\n let value_1 := calldataload(offset)\n if iszero(eq(value_1, and(value_1, 0xffffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value := and(value_1, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n }\n function abi_decode_tuple_t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(0, 0) }\n if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n value1 := add(_2, 32)\n value2 := length\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_stringliteral_f5d2ea39d7e6c7d19dc32ccc2bd7ca26b7aa4a603ef4aa6f2b205c93c3ffe43d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 66)\n mstore(add(headStart, 64), \"TransparentUpgradeableProxy: adm\")\n mstore(add(headStart, 96), \"in cannot fallback to proxy targ\")\n mstore(add(headStart, 128), \"et\")\n tail := add(headStart, 160)\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Address: delegate call to non-co\")\n mstore(add(headStart, 96), \"ntract\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_stringliteral_3820e16891102c1360a787e6e648431097d92537f969d458f5c94b56f8318be5__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"ERC1967: new admin is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n }\n function abi_encode_tuple_t_stringliteral_972b7028e8de0bff0d553b3264eba2312ec98a552add05e58853b313f9f4ac65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 45)\n mstore(add(headStart, 64), \"ERC1967: new implementation is n\")\n mstore(add(headStart, 96), \"ot a contract\")\n tail := add(headStart, 128)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5C60DA1B GT PUSH2 0x43 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0xC2 JUMPI DUP1 PUSH4 0x8F283970 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0xF851A440 EQ PUSH2 0x154 JUMPI PUSH2 0x6D JUMP JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x75 JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0xAF JUMPI PUSH2 0x6D JUMP JUMPDEST CALLDATASIZE PUSH2 0x6D JUMPI PUSH2 0x6B PUSH2 0x183 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x6B PUSH2 0x183 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B PUSH2 0xAA CALLDATASIZE PUSH1 0x4 PUSH2 0x9A1 JUMP JUMPDEST PUSH2 0x19D JUMP JUMPDEST PUSH2 0x6B PUSH2 0xBD CALLDATASIZE PUSH1 0x4 PUSH2 0x9BC JUMP JUMPDEST PUSH2 0x1FE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0xDB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0xE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF1 PUSH2 0x289 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x126 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x133 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x140 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B PUSH2 0x14F CALLDATASIZE PUSH1 0x4 PUSH2 0x9A1 JUMP JUMPDEST PUSH2 0x2DE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x160 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x16D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF1 PUSH2 0x322 JUMP JUMPDEST PUSH2 0x18B PUSH2 0x3AF JUMP JUMPDEST PUSH2 0x19B PUSH2 0x196 PUSH2 0x49D JUMP JUMPDEST PUSH2 0x4A7 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x1A5 PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1F6 JUMPI PUSH2 0x1F3 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH1 0x0 PUSH2 0x50B JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x1F3 PUSH2 0x183 JUMP JUMPDEST PUSH2 0x206 PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x281 JUMPI PUSH2 0x27C DUP4 DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH1 0x1 SWAP3 POP PUSH2 0x50B SWAP2 POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x27C PUSH2 0x183 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x293 PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2D3 JUMPI PUSH2 0x2CE PUSH2 0x49D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x2DB PUSH2 0x183 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH2 0x2E6 PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1F6 JUMPI PUSH2 0x1F3 DUP2 PUSH2 0x536 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32C PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x2D3 JUMPI PUSH2 0x2CE PUSH2 0x4CB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x38C DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x27 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xAD9 PUSH1 0x27 SWAP2 CODECOPY PUSH2 0x597 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x3B7 PUSH2 0x4CB JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x19B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x42 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73706172656E745570677261646561626C6550726F78793A2061646D PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x696E2063616E6E6F742066616C6C6261636B20746F2070726F78792074617267 PUSH1 0x64 DUP3 ADD MSTORE PUSH32 0x6574000000000000000000000000000000000000000000000000000000000000 PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0xA4 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2CE PUSH2 0x6BF JUMP JUMPDEST CALLDATASIZE PUSH1 0x0 DUP1 CALLDATACOPY PUSH1 0x0 DUP1 CALLDATASIZE PUSH1 0x0 DUP5 GAS DELEGATECALL RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY DUP1 DUP1 ISZERO PUSH2 0x4C6 JUMPI RETURNDATASIZE PUSH1 0x0 RETURN JUMPDEST RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x514 DUP4 PUSH2 0x6E7 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD GT DUP1 PUSH2 0x521 JUMPI POP DUP1 JUMPDEST ISZERO PUSH2 0x27C JUMPI PUSH2 0x530 DUP4 DUP4 PUSH2 0x367 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x7E644D79422F17C01E4894B5F4F588D331EBFA28653D42AE832DC59E38C9798F PUSH2 0x55F PUSH2 0x4CB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 DUP5 AND PUSH1 0x20 DUP4 ADD MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x1F3 DUP2 PUSH2 0x734 JUMP JUMPDEST PUSH1 0x60 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND EXTCODESIZE PUSH2 0x63D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2064656C65676174652063616C6C20746F206E6F6E2D636F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E74726163740000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x494 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH1 0x40 MLOAD PUSH2 0x665 SWAP2 SWAP1 PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x6A0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x6A5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0x6B5 DUP3 DUP3 DUP7 PUSH2 0x840 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x4EF JUMP JUMPDEST PUSH2 0x6F0 DUP2 PUSH2 0x893 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x7D7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E65772061646D696E20697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x494 JUMP JUMPDEST DUP1 PUSH32 0xB53127684A568B3173AE13B9F8A6016E243E63B6E8EE1178D6A717850B5D6103 JUMPDEST DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0x84F JUMPI POP DUP2 PUSH2 0x38C JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0x85F JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x494 SWAP2 SWAP1 PUSH2 0xA87 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x937 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x455243313936373A206E657720696D706C656D656E746174696F6E206973206E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F74206120636F6E747261637400000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x494 JUMP JUMPDEST DUP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC PUSH2 0x7FA JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x985 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x38C DUP3 PUSH2 0x95E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x9D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9DA DUP5 PUSH2 0x95E JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x9F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0xA1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP8 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xA2C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP5 POP DUP1 SWAP4 POP POP POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA5A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xA42 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x530 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xA7D DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xA3F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xAA6 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xA3F JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP INVALID COINBASE PUSH5 0x6472657373 GASPRICE KECCAK256 PUSH13 0x6F772D6C6576656C2064656C65 PUSH8 0x6174652063616C6C KECCAK256 PUSH7 0x61696C6564A264 PUSH21 0x726F6E5822122053E24B5D5FE72EFD64D4B8B388E5 PUSH26 0xB4E5593FAFBF177689150DABBA91BBE6FF64736F6C634300080B STOP CALLER ", - "sourceMap": "1634:3556:22:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2903:11:17;:9;:11::i;:::-;1634:3556:22;;2680:11:17;:9;:11::i;4032:134:22:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4032:134:22;;;;;:::i;:::-;;:::i;4542:164::-;;;;;;:::i;:::-;;:::i;3435:129::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1338:42:37;1326:55;;;1308:74;;1296:2;1281:18;3435:129:22;;;;;;;3769:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3769:103:22;;;;;:::i;:::-;;:::i;2879:96::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2327:110:17:-;2375:17;:15;:17::i;:::-;2402:28;2412:17;:15;:17::i;:::-;2402:9;:28::i;:::-;2327:110::o;4032:134:22:-;2350:11;:9;:11::i;:::-;2336:25;;:10;:25;;;2332:99;;;4105:54:::1;4123:17;4142:9;;;;;;;;;;;::::0;4153:5:::1;4105:17;:54::i;:::-;4032:134:::0;:::o;2332:99::-;2409:11;:9;:11::i;4542:164::-;2350:11;:9;:11::i;:::-;2336:25;;:10;:25;;;2332:99;;;4651:48:::1;4669:17;4688:4;;4651:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;4694:4:22::1;::::0;-1:-1:-1;4651:17:22::1;::::0;-1:-1:-1;;4651:48:22:i:1;:::-;4542:164:::0;;;:::o;2332:99::-;2409:11;:9;:11::i;3435:129::-;3487:23;2350:11;:9;:11::i;:::-;2336:25;;:10;:25;;;2332:99;;;3540:17:::1;:15;:17::i;:::-;3522:35;;3435:129:::0;:::o;2332:99::-;2409:11;:9;:11::i;:::-;3435:129;:::o;3769:103::-;2350:11;:9;:11::i;:::-;2336:25;;:10;:25;;;2332:99;;;3843:22:::1;3856:8;3843:12;:22::i;2879:96::-:0;2922:14;2350:11;:9;:11::i;:::-;2336:25;;:10;:25;;;2332:99;;;2957:11:::1;:9;:11::i;6575:198:25:-:0;6658:12;6689:77;6710:6;6718:4;6689:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;6682:84;6575:198;-1:-1:-1;;;6575:198:25:o;1180:320::-;1470:19;;;:23;;;1180:320::o;4981:207:22:-;5066:11;:9;:11::i;:::-;5052:25;;:10;:25;;;;5044:104;;;;;;;1595:2:37;5044:104:22;;;1577:21:37;1634:2;1614:18;;;1607:30;1673:34;1653:18;;;1646:62;1744:34;1724:18;;;1717:62;1816:4;1795:19;;;1788:33;1838:19;;5044:104:22;;;;;;;;1240:140:15;1307:12;1338:35;:33;:35::i;953:895:17:-;1291:14;1288:1;1285;1272:34;1505:1;1502;1486:14;1483:1;1467:14;1460:5;1447:60;1581:16;1578:1;1575;1560:38;1619:6;1686:66;;;;1801:16;1798:1;1791:27;1686:66;1721:16;1718:1;1711:27;4113:130:16;4165:7;3847:66;4191:39;:45;;;;4113:130;-1:-1:-1;4113:130:16:o;2188:295::-;2326:29;2337:17;2326:10;:29::i;:::-;2383:1;2369:4;:11;:15;:28;;;;2388:9;2369:28;2365:112;;;2413:53;2442:17;2461:4;2413:28;:53::i;:::-;;2188:295;;;:::o;4637:135::-;4701:35;4714:11;:9;:11::i;:::-;4701:35;;;2052:42:37;2121:15;;;2103:34;;2173:15;;;2168:2;2153:18;;2146:43;2015:18;4701:35:16;;;;;;;4746:19;4756:8;4746:9;:19::i;6959:387:25:-;7100:12;1470:19;;;;7124:69;;;;;;;2402:2:37;7124:69:25;;;2384:21:37;2441:2;2421:18;;;2414:30;2480:34;2460:18;;;2453:62;2551:8;2531:18;;;2524:36;2577:19;;7124:69:25;2200:402:37;7124:69:25;7205:12;7219:23;7246:6;:19;;7266:4;7246:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7204:67;;;;7288:51;7305:7;7314:10;7326:12;7288:16;:51::i;:::-;7281:58;6959:387;-1:-1:-1;;;;;;6959:387:25:o;1306:140:16:-;1359:7;1035:66;1385:48;1599:147:27;1902:152:16;1968:37;1987:17;1968:18;:37::i;:::-;2020:27;;;;;;;;;;;1902:152;:::o;4325:201::-;4388:22;;;4380:73;;;;;;;3351:2:37;4380:73:16;;;3333:21:37;3390:2;3370:18;;;3363:30;3429:34;3409:18;;;3402:62;3500:8;3480:18;;;3473:36;3526:19;;4380:73:16;3149:402:37;4380:73:16;4511:8;3847:66;4463:39;:56;;;;;;;;;;;;;;;-1:-1:-1;4325:201:16:o;7566:692:25:-;7712:12;7740:7;7736:516;;;-1:-1:-1;7770:10:25;7763:17;;7736:516;7881:17;;:21;7877:365;;8075:10;8069:17;8135:15;8122:10;8118:2;8114:19;8107:44;7877:365;8214:12;8207:20;;;;;;;;;;;:::i;1537:259:16:-;1470:19:25;;;;1610:95:16;;;;;;;4205:2:37;1610:95:16;;;4187:21:37;4244:2;4224:18;;;4217:30;4283:34;4263:18;;;4256:62;4354:15;4334:18;;;4327:43;4387:19;;1610:95:16;4003:409:37;1610:95:16;1772:17;1035:66;1715:48;1599:147:27;14:282:37;53:5;101:6;88:20;152:44;143:7;139:58;130:7;127:71;117:99;;212:1;209;202:12;117:99;247:42;234:56;;14:282;-1:-1:-1;;14:282:37:o;301:186::-;360:6;413:2;401:9;392:7;388:23;384:32;381:52;;;429:1;426;419:12;381:52;452:29;471:9;452:29;:::i;492:665::-;571:6;579;587;640:2;628:9;619:7;615:23;611:32;608:52;;;656:1;653;646:12;608:52;679:29;698:9;679:29;:::i;:::-;669:39;;759:2;748:9;744:18;731:32;782:18;823:2;815:6;812:14;809:34;;;839:1;836;829:12;809:34;877:6;866:9;862:22;852:32;;922:7;915:4;911:2;907:13;903:27;893:55;;944:1;941;934:12;893:55;984:2;971:16;1010:2;1002:6;999:14;996:34;;;1026:1;1023;1016:12;996:34;1071:7;1066:2;1057:6;1053:2;1049:15;1045:24;1042:37;1039:57;;;1092:1;1089;1082:12;1039:57;1123:2;1119;1115:11;1105:21;;1145:6;1135:16;;;;;492:665;;;;;:::o;2607:258::-;2679:1;2689:113;2703:6;2700:1;2697:13;2689:113;;;2779:11;;;2773:18;2760:11;;;2753:39;2725:2;2718:10;2689:113;;;2820:6;2817:1;2814:13;2811:48;;;-1:-1:-1;;2855:1:37;2837:16;;2830:27;2607:258::o;2870:274::-;2999:3;3037:6;3031:13;3053:53;3099:6;3094:3;3087:4;3079:6;3075:17;3053:53;:::i;:::-;3122:16;;;;;2870:274;-1:-1:-1;;2870:274:37:o;3556:442::-;3705:2;3694:9;3687:21;3668:4;3737:6;3731:13;3780:6;3775:2;3764:9;3760:18;3753:34;3796:66;3855:6;3850:2;3839:9;3835:18;3830:2;3822:6;3818:15;3796:66;:::i;:::-;3914:2;3902:15;3919:66;3898:88;3883:104;;;;3989:2;3879:113;;3556:442;-1:-1:-1;;3556:442:37:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "573800", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "": "infinite", - "admin()": "infinite", - "changeAdmin(address)": "infinite", - "implementation()": "infinite", - "upgradeTo(address)": "infinite", - "upgradeToAndCall(address,bytes)": "infinite" - }, - "internal": { - "_admin()": "infinite", - "_beforeFallback()": "infinite" - } - }, - "methodIdentifiers": { - "admin()": "f851a440", - "changeAdmin(address)": "8f283970", - "implementation()": "5c60da1b", - "upgradeTo(address)": "3659cfe6", - "upgradeToAndCall(address,bytes)": "4f1ef286" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/UUPSUpgradeable.json b/extendedArtifactsTron/UUPSUpgradeable.json deleted file mode 100644 index cb63f47..0000000 --- a/extendedArtifactsTron/UUPSUpgradeable.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "contractName": "UUPSUpgradeable", - "sourceName": "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing `UUPSUpgradeable` with a custom implementation of upgrades. The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. _Available since v4.1._", - "kind": "dev", - "methods": { - "proxiableUUID()": { - "details": "Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." - } - }, - "stateVariables": { - "__self": { - "custom:oz-upgrades-unsafe-allow": "state-variable-immutable state-variable-assignment" - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "proxiableUUID()": "52d1902d", - "upgradeTo(address)": "3659cfe6", - "upgradeToAndCall(address,bytes)": "4f1ef286" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing `UUPSUpgradeable` with a custom implementation of upgrades. The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. _Available since v4.1._\",\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate that the this implementation remains valid after an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"stateVariables\":{\"__self\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable state-variable-assignment\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\":\"UUPSUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\",\"keccak256\":\"0xef60022354b52f65a38d41d247a9bd6d57042aaf3ab6f93f4645f2df8210e88c\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/UpgradeableBeacon.json b/extendedArtifactsTron/UpgradeableBeacon.json deleted file mode 100644 index e5f5b2d..0000000 --- a/extendedArtifactsTron/UpgradeableBeacon.json +++ /dev/null @@ -1,2058 +0,0 @@ -{ - "contractName": "UpgradeableBeacon", - "sourceName": "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - }, - { - "internalType": "address", - "name": "initialOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b5060405161078638038061078683398101604081905261004991610197565b8061005381610064565b5061005d826100b4565b50506101ca565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6100c78161015f60201b6103a71760201c565b61013d5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03163b151590565b80516000906001600160a81b038116811461018857600080fd5b6001600160a01b031692915050565b600080604083850312156101aa57600080fd5b6101b38361016e565b91506101c16020840161016e565b90509250929050565b6105ad806101d96000396000f3fe608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100815760003560e01c8063715018a61161006a578063715018a6146100de5780638da5cb5b146100e6578063f2fde38b1461010457600080fd5b80633659cfe6146100865780635c60da1b1461009b575b600080fd5b610099610094366004610523565b610117565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100996101ea565b60005473ffffffffffffffffffffffffffffffffffffffff166100b5565b610099610112366004610523565b610277565b60005473ffffffffffffffffffffffffffffffffffffffff16331461019d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101a6816103c3565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610194565b61027560006104ae565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610194565b73ffffffffffffffffffffffffffffffffffffffff811661039b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610194565b6103a4816104ae565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff81163b610467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e7472616374000000000000000000000000006064820152608401610194565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561053557600080fd5b813574ffffffffffffffffffffffffffffffffffffffffff8116811461055a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff16939250505056fea26474726f6e58221220524ffc4123c32771f577c9c98f6887ebe3a7911d81a8f94fed14d70ca2b7f67c64736f6c634300080b0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50d3801561001d57600080fd5b50d2801561002a57600080fd5b50600436106100815760003560e01c8063715018a61161006a578063715018a6146100de5780638da5cb5b146100e6578063f2fde38b1461010457600080fd5b80633659cfe6146100865780635c60da1b1461009b575b600080fd5b610099610094366004610523565b610117565b005b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100996101ea565b60005473ffffffffffffffffffffffffffffffffffffffff166100b5565b610099610112366004610523565b610277565b60005473ffffffffffffffffffffffffffffffffffffffff16331461019d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101a6816103c3565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610194565b61027560006104ae565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610194565b73ffffffffffffffffffffffffffffffffffffffff811661039b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610194565b6103a4816104ae565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff81163b610467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e7472616374000000000000000000000000006064820152608401610194565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561053557600080fd5b813574ffffffffffffffffffffffffffffffffffffffffff8116811461055a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff16939250505056fea26474726f6e58221220524ffc4123c32771f577c9c98f6887ebe3a7911d81a8f94fed14d70ca2b7f67c64736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "details": "This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their implementation contract, which is where they will delegate all function calls. An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.", - "events": { - "Upgraded(address)": { - "details": "Emitted when the implementation returned by the beacon is changed." - } - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the beacon." - }, - "implementation()": { - "details": "Returns the current implementation address." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "upgradeTo(address)": { - "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_1616": { - "entryPoint": null, - "id": 1616, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_2335": { - "entryPoint": null, - "id": 2335, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_setImplementation_2381": { - "entryPoint": 180, - "id": 2381, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_transferOwnership_1696": { - "entryPoint": 100, - "id": 1696, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@isContract_2899": { - "entryPoint": 351, - "id": 2899, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 366, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address_fromMemory": { - "entryPoint": 407, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:972:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "74:178:37", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "84:28:37", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "105:6:37" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "99:5:37" - }, - "nodeType": "YulFunctionCall", - "src": "99:13:37" - }, - "variables": [ - { - "name": "value_1", - "nodeType": "YulTypedName", - "src": "88:7:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "179:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "188:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "191:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "181:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "181:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "181:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "134:7:37" - }, - { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "147:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "164:3:37", - "type": "", - "value": "168" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "169:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "160:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "160:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "173:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "156:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "156:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "143:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "143:33:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "131:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "131:46:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "124:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "124:54:37" - }, - "nodeType": "YulIf", - "src": "121:74:37" - }, - { - "nodeType": "YulAssignment", - "src": "204:42:37", - "value": { - "arguments": [ - { - "name": "value_1", - "nodeType": "YulIdentifier", - "src": "217:7:37" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "234:3:37", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "239:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "230:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "230:11:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "243:1:37", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "226:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "226:19:37" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "213:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "213:33:37" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "204:5:37" - } - ] - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "53:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:37", - "type": "" - } - ], - "src": "14:238:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "355:195:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "401:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "410:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "413:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "403:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "403:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "403:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "376:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "385:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "372:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "372:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "397:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "368:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "368:32:37" - }, - "nodeType": "YulIf", - "src": "365:52:37" - }, - { - "nodeType": "YulAssignment", - "src": "426:50:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "466:9:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "436:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "436:40:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "426:6:37" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "485:59:37", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "529:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "540:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "525:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "525:18:37" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "495:29:37" - }, - "nodeType": "YulFunctionCall", - "src": "495:49:37" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "485:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "313:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "324:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "336:6:37", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "344:6:37", - "type": "" - } - ], - "src": "257:293:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "729:241:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "746:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "757:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "739:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "739:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "739:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "780:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "791:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "776:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "776:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "796:2:37", - "type": "", - "value": "51" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "769:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "769:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "769:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "819:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "830:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "815:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "815:18:37" - }, - { - "hexValue": "5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "835:34:37", - "type": "", - "value": "UpgradeableBeacon: implementatio" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "808:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "808:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "808:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "890:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "901:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "886:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "886:18:37" - }, - { - "hexValue": "6e206973206e6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "906:21:37", - "type": "", - "value": "n is not a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "879:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "879:49:37" - }, - "nodeType": "YulExpressionStatement", - "src": "879:49:37" - }, - { - "nodeType": "YulAssignment", - "src": "937:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "949:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "960:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "945:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "945:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "937:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "706:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "720:4:37", - "type": "" - } - ], - "src": "555:415:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_address_fromMemory(offset) -> value\n {\n let value_1 := mload(offset)\n if iszero(eq(value_1, and(value_1, sub(shl(168, 1), 1)))) { revert(0, 0) }\n value := and(value_1, sub(shl(160, 1), 1))\n }\n function abi_decode_tuple_t_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address_fromMemory(headStart)\n value1 := abi_decode_address_fromMemory(add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 51)\n mstore(add(headStart, 64), \"UpgradeableBeacon: implementatio\")\n mstore(add(headStart, 96), \"n is not a contract\")\n tail := add(headStart, 128)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x786 CODESIZE SUB DUP1 PUSH2 0x786 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x49 SWAP2 PUSH2 0x197 JUMP JUMPDEST DUP1 PUSH2 0x53 DUP2 PUSH2 0x64 JUMP JUMPDEST POP PUSH2 0x5D DUP3 PUSH2 0xB4 JUMP JUMPDEST POP POP PUSH2 0x1CA JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0xC7 DUP2 PUSH2 0x15F PUSH1 0x20 SHL PUSH2 0x3A7 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x13D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x33 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E206973206E6F74206120636F6E747261637400000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA8 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1B3 DUP4 PUSH2 0x16E JUMP JUMPDEST SWAP2 POP PUSH2 0x1C1 PUSH1 0x20 DUP5 ADD PUSH2 0x16E JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x5AD DUP1 PUSH2 0x1D9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x81 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x6A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xE6 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x104 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x86 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x9B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x99 PUSH2 0x94 CALLDATASIZE PUSH1 0x4 PUSH2 0x523 JUMP JUMPDEST PUSH2 0x117 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x99 PUSH2 0x1EA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xB5 JUMP JUMPDEST PUSH2 0x99 PUSH2 0x112 CALLDATASIZE PUSH1 0x4 PUSH2 0x523 JUMP JUMPDEST PUSH2 0x277 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x19D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1A6 DUP2 PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x26B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x194 JUMP JUMPDEST PUSH2 0x275 PUSH1 0x0 PUSH2 0x4AE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x194 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x39B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x194 JUMP JUMPDEST PUSH2 0x3A4 DUP2 PUSH2 0x4AE JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x467 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x33 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E206973206E6F74206120636F6E747261637400000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x194 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x535 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x55A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 MSTORE 0x4F 0xFC COINBASE 0x23 0xC3 0x27 PUSH18 0xF577C9C98F6887EBE3A7911D81A8F94FED14 NATIVEFREEZEEXPIRETIME 0xC LOG2 0xB7 0xF6 PUSH29 0x64736F6C634300080B0033000000000000000000000000000000000000 ", - "sourceMap": "543:1541:20:-:0;;;932:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;999:12;942:32:12;999:12:20;942:18:12;:32::i;:::-;-1:-1:-1;1023:35:20::1;1042:15:::0;1023:18:::1;:35::i;:::-;932:133:::0;;543:1541;;2291:187:12;2364:16;2383:6;;-1:-1:-1;;;;;2399:17:12;;;-1:-1:-1;;;;;;2399:17:12;;;;;;2431:40;;2383:6;;;;;;;2431:40;;2364:16;2431:40;2354:124;2291:187;:::o;1856:226:20:-;1937:37;1956:17;1937:18;;;;;:37;;:::i;:::-;1929:101;;;;-1:-1:-1;;;1929:101:20;;757:2:37;1929:101:20;;;739:21:37;796:2;776:18;;;769:30;835:34;815:18;;;808:62;906:21;886:18;;;879:49;945:19;;1929:101:20;;;;;;;;2040:15;:35;;-1:-1:-1;;;;;;2040:35:20;-1:-1:-1;;;;;2040:35:20;;;;;;;;;;1856:226::o;1180:320:25:-;-1:-1:-1;;;;;1470:19:25;;:23;;;1180:320::o;14:238:37:-;99:13;;64:5;;-1:-1:-1;;;;;143:33:37;;131:46;;121:74;;191:1;188;181:12;121:74;-1:-1:-1;;;;;213:33:37;;14:238;-1:-1:-1;;14:238:37:o;257:293::-;336:6;344;397:2;385:9;376:7;372:23;368:32;365:52;;;413:1;410;403:12;365:52;436:40;466:9;436:40;:::i;:::-;426:50;;495:49;540:2;529:9;525:18;495:49;:::i;:::-;485:59;;257:293;;;;;:::o;555:415::-;543:1541:20;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@_msgSender_3188": { - "entryPoint": null, - "id": 3188, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_setImplementation_2381": { - "entryPoint": 963, - "id": 2381, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_transferOwnership_1696": { - "entryPoint": 1198, - "id": 1696, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@implementation_2345": { - "entryPoint": null, - "id": 2345, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@isContract_2899": { - "entryPoint": 935, - "id": 2899, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@owner_1625": { - "entryPoint": null, - "id": 1625, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@renounceOwnership_1653": { - "entryPoint": 490, - "id": 1653, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@transferOwnership_1676": { - "entryPoint": 631, - "id": 1676, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@upgradeTo_2362": { - "entryPoint": 279, - "id": 2362, - "parameterSlots": 1, - "returnSlots": 0 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 1315, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1795:37", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:37", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "84:290:37", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "130:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "139:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "142:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "132:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "132:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "132:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "105:7:37" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "114:9:37" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "101:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "101:23:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "126:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "97:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "97:32:37" - }, - "nodeType": "YulIf", - "src": "94:52:37" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "155:36:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "181:9:37" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "168:12:37" - }, - "nodeType": "YulFunctionCall", - "src": "168:23:37" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "159:5:37", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "279:16:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "288:1:37", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "291:1:37", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "281:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "281:12:37" - }, - "nodeType": "YulExpressionStatement", - "src": "281:12:37" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "213:5:37" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "224:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "231:44:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "220:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "220:56:37" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "210:2:37" - }, - "nodeType": "YulFunctionCall", - "src": "210:67:37" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "203:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "203:75:37" - }, - "nodeType": "YulIf", - "src": "200:95:37" - }, - { - "nodeType": "YulAssignment", - "src": "304:64:37", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "318:5:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "325:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "314:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "314:54:37" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "304:6:37" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "50:9:37", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "61:7:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "73:6:37", - "type": "" - } - ], - "src": "14:360:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "480:125:37", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "490:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "502:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "513:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "498:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "498:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "490:4:37" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "532:9:37" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "547:6:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "555:42:37", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "543:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "543:55:37" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "525:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "525:74:37" - }, - "nodeType": "YulExpressionStatement", - "src": "525:74:37" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "449:9:37", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "460:6:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "471:4:37", - "type": "" - } - ], - "src": "379:226:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "784:182:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "801:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "812:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "794:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "794:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "794:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "835:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "846:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "831:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "831:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "851:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "824:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "824:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "824:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "874:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "885:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "870:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "870:18:37" - }, - { - "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "890:34:37", - "type": "", - "value": "Ownable: caller is not the owner" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "863:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "863:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "863:62:37" - }, - { - "nodeType": "YulAssignment", - "src": "934:26:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "946:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "957:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "942:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "942:18:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "934:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "761:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "775:4:37", - "type": "" - } - ], - "src": "610:356:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1145:228:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1162:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1173:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1155:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1155:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1155:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1196:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1207:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1192:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1192:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1212:2:37", - "type": "", - "value": "38" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1185:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1185:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1185:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1235:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1246:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1231:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1231:18:37" - }, - { - "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1251:34:37", - "type": "", - "value": "Ownable: new owner is the zero a" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1224:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1224:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1224:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1306:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1317:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1302:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1302:18:37" - }, - { - "hexValue": "646472657373", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1322:8:37", - "type": "", - "value": "ddress" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1295:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1295:36:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1295:36:37" - }, - { - "nodeType": "YulAssignment", - "src": "1340:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1352:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1363:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1348:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1348:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1340:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1122:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1136:4:37", - "type": "" - } - ], - "src": "971:402:37" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1552:241:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1569:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1580:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1562:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1562:21:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1562:21:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1603:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1614:2:37", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1599:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1599:18:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1619:2:37", - "type": "", - "value": "51" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1592:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1592:30:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1592:30:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1642:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1653:2:37", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1638:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1638:18:37" - }, - { - "hexValue": "5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1658:34:37", - "type": "", - "value": "UpgradeableBeacon: implementatio" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1631:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1631:62:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1631:62:37" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1713:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1724:2:37", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1709:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1709:18:37" - }, - { - "hexValue": "6e206973206e6f74206120636f6e7472616374", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1729:21:37", - "type": "", - "value": "n is not a contract" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1702:6:37" - }, - "nodeType": "YulFunctionCall", - "src": "1702:49:37" - }, - "nodeType": "YulExpressionStatement", - "src": "1702:49:37" - }, - { - "nodeType": "YulAssignment", - "src": "1760:27:37", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1772:9:37" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1783:3:37", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1768:3:37" - }, - "nodeType": "YulFunctionCall", - "src": "1768:19:37" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1760:4:37" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1529:9:37", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1543:4:37", - "type": "" - } - ], - "src": "1378:415:37" - } - ] - }, - "contents": "{\n { }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value0 := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n mstore(add(headStart, 96), \"ddress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_5ccca6b0666a32006e874c0f8fc30910124098b6e8e91ea2ea1baa45ce41f1e6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 51)\n mstore(add(headStart, 64), \"UpgradeableBeacon: implementatio\")\n mstore(add(headStart, 96), \"n is not a contract\")\n tail := add(headStart, 128)\n }\n}", - "id": 37, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH2 0x1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH2 0x2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x81 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x6A JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xE6 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x104 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x3659CFE6 EQ PUSH2 0x86 JUMPI DUP1 PUSH4 0x5C60DA1B EQ PUSH2 0x9B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x99 PUSH2 0x94 CALLDATASIZE PUSH1 0x4 PUSH2 0x523 JUMP JUMPDEST PUSH2 0x117 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x99 PUSH2 0x1EA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xB5 JUMP JUMPDEST PUSH2 0x99 PUSH2 0x112 CALLDATASIZE PUSH1 0x4 PUSH2 0x523 JUMP JUMPDEST PUSH2 0x277 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x19D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x1A6 DUP2 PUSH2 0x3C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B SWAP1 PUSH1 0x0 SWAP1 LOG2 POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x26B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x194 JUMP JUMPDEST PUSH2 0x275 PUSH1 0x0 PUSH2 0x4AE JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x2F8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x194 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x39B JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x194 JUMP JUMPDEST PUSH2 0x3A4 DUP2 PUSH2 0x4AE JUMP JUMPDEST POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND EXTCODESIZE PUSH2 0x467 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x33 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5570677261646561626C65426561636F6E3A20696D706C656D656E746174696F PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E206973206E6F74206120636F6E747261637400000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x194 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x535 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x55A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 MSTORE 0x4F 0xFC COINBASE 0x23 0xC3 0x27 PUSH18 0xF577C9C98F6887EBE3A7911D81A8F94FED14 NATIVEFREEZEEXPIRETIME 0xC LOG2 0xB7 0xF6 PUSH29 0x64736F6C634300080B0033000000000000000000000000000000000000 ", - "sourceMap": "543:1541:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1514:167;;;;;;:::i;:::-;;:::i;:::-;;1143:112;1233:15;;;;1143:112;;;555:42:37;543:55;;;525:74;;513:2;498:18;1143:112:20;;;;;;;1689:101:12;;;:::i;1057:85::-;1103:7;1129:6;;;1057:85;;1939:198;;;;;;:::i;:::-;;:::i;1514:167:20:-;1103:7:12;1129:6;1269:23;1129:6;719:10:26;1269:23:12;1261:68;;;;;;;812:2:37;1261:68:12;;;794:21:37;;;831:18;;;824:30;890:34;870:18;;;863:62;942:18;;1261:68:12;;;;;;;;;1595:37:20::1;1614:17;1595:18;:37::i;:::-;1647:27;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;1514:167:::0;:::o;1689:101:12:-;1103:7;1129:6;1269:23;1129:6;719:10:26;1269:23:12;1261:68;;;;;;;812:2:37;1261:68:12;;;794:21:37;;;831:18;;;824:30;890:34;870:18;;;863:62;942:18;;1261:68:12;610:356:37;1261:68:12;1753:30:::1;1780:1;1753:18;:30::i;:::-;1689:101::o:0;1939:198::-;1103:7;1129:6;1269:23;1129:6;719:10:26;1269:23:12;1261:68;;;;;;;812:2:37;1261:68:12;;;794:21:37;;;831:18;;;824:30;890:34;870:18;;;863:62;942:18;;1261:68:12;610:356:37;1261:68:12;2027:22:::1;::::0;::::1;2019:73;;;::::0;::::1;::::0;;1173:2:37;2019:73:12::1;::::0;::::1;1155:21:37::0;1212:2;1192:18;;;1185:30;1251:34;1231:18;;;1224:62;1322:8;1302:18;;;1295:36;1348:19;;2019:73:12::1;971:402:37::0;2019:73:12::1;2102:28;2121:8;2102:18;:28::i;:::-;1939:198:::0;:::o;1180:320:25:-;1470:19;;;:23;;;1180:320::o;1856:226:20:-;1470:19:25;;;;1929:101:20;;;;;;;1580:2:37;1929:101:20;;;1562:21:37;1619:2;1599:18;;;1592:30;1658:34;1638:18;;;1631:62;1729:21;1709:18;;;1702:49;1768:19;;1929:101:20;1378:415:37;1929:101:20;2040:15;:35;;;;;;;;;;;;;;;1856:226::o;2291:187:12:-;2364:16;2383:6;;;2399:17;;;;;;;;;;2431:40;;2383:6;;;;;;;2431:40;;2364:16;2431:40;2354:124;2291:187;:::o;14:360:37:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;231:44;224:5;220:56;213:5;210:67;200:95;;291:1;288;281:12;200:95;325:42;314:54;;14:360;-1:-1:-1;;;14:360:37:o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "290600", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "implementation()": "2355", - "owner()": "2365", - "renounceOwnership()": "28123", - "transferOwnership(address)": "28309", - "upgradeTo(address)": "30487" - }, - "internal": { - "_setImplementation(address)": "infinite" - } - }, - "methodIdentifiers": { - "implementation()": "5c60da1b", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b", - "upgradeTo(address)": "3659cfe6" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their implementation contract, which is where they will delegate all function calls. An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\",\"events\":{\"Upgraded(address)\":{\"details\":\"Emitted when the implementation returned by the beacon is changed.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the beacon.\"},\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\":\"UpgradeableBeacon\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0x740c7bfd168fb30daeefc3193f5a5482531669f02430e29d46c2734a9ceb511f\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 1599, - "contract": "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol:UpgradeableBeacon", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 2314, - "contract": "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol:UpgradeableBeacon", - "label": "_implementation", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/UsingDiamondOwner.json b/extendedArtifactsTron/UsingDiamondOwner.json deleted file mode 100644 index 9fff102..0000000 --- a/extendedArtifactsTron/UsingDiamondOwner.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "contractName": "UsingDiamondOwner", - "sourceName": "solc_0.8/diamond/UsingDiamondOwner.sol", - "abi": [], - "bytecode": "0x6080604052348015600f57600080fd5b50d38015601b57600080fd5b50d28015602757600080fd5b50603f8060356000396000f3fe6080604052600080fdfea26474726f6e58221220b8bb38b444c9dba3b9a22e3c5b6eafaee211369089feed013cf37e482c85117c64736f6c634300080b0033", - "deployedBytecode": "0x6080604052600080fdfea26474726f6e58221220b8bb38b444c9dba3b9a22e3c5b6eafaee211369089feed013cf37e482c85117c64736f6c634300080b0033", - "linkReferences": {}, - "deployedLinkReferences": {}, - "devdoc": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENID DUP1 ISZERO PUSH1 0x1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLTOKENVALUE DUP1 ISZERO PUSH1 0x27 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3F DUP1 PUSH1 0x35 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 0xB8 0xBB CODESIZE 0xB4 DIFFICULTY 0xC9 0xDB LOG3 0xB9 LOG2 0x2E EXTCODECOPY JUMPDEST PUSH15 0xAFAEE211369089FEED013CF37E482C DUP6 GT PUSH29 0x64736F6C634300080B0033000000000000000000000000000000000000 ", - "sourceMap": "95:247:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x74726F6E58 0x22 SLT KECCAK256 0xB8 0xBB CODESIZE 0xB4 DIFFICULTY 0xC9 0xDB LOG3 0xB9 LOG2 0x2E EXTCODECOPY JUMPDEST PUSH15 0xAFAEE211369089FEED013CF37E482C DUP6 GT PUSH29 0x64736F6C634300080B0033000000000000000000000000000000000000 ", - "sourceMap": "95:247:1:-:0;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "12600", - "executionCost": "114", - "totalCost": "12714" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.b01f3284.mod\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/UsingDiamondOwner.sol\":\"UsingDiamondOwner\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/UsingDiamondOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x610145c6957708608f3d2c2626dbf3461f2886b0b304c2bdc0c332df981b82f8\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [], - "types": null - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "solcInput": "{\n \"language\": \"Solidity\",\n \"sources\": {\n \"solc_0.8/diamond/Diamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"./libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"./interfaces/IDiamondCut.sol\\\";\\n\\ncontract Diamond {\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n for (uint256 i = 0; i < _initializations.length; i++) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n require(facet != address(0), \\\"Diamond: Function does not exist\\\");\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondCutFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondLoupe} from \\\"../interfaces/IDiamondLoupe.sol\\\";\\n\\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external view override returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/facets/OwnershipFacet.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IERC173 } from \\\"../interfaces/IERC173.sol\\\";\\n\\ncontract OwnershipFacet is IERC173 {\\n function transferOwnership(address _newOwner) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.setContractOwner(_newOwner);\\n }\\n\\n function owner() external override view returns (address owner_) {\\n owner_ = LibDiamond.contractOwner();\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/initializers/DiamondERC165Init.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondCut.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/diamond/interfaces/IERC173.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title ERC-173 Contract Ownership Standard\\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\\n/* is ERC165 */\\ninterface IERC173 {\\n /// @dev This emits when ownership of a contract changes.\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /// @notice Get the address of the owner\\n /// @return owner_ The address of the owner.\\n function owner() external view returns (address owner_);\\n\\n /// @notice Set the address of the new owner of the contract\\n /// @dev Set _newOwner to address(0) to renounce any ownership.\\n /// @param _newOwner The address of the new owner of the contract\\n function transferOwnership(address _newOwner) external;\\n}\\n\"\n },\n \"solc_0.8/diamond/libraries/LibDiamond.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\"\n },\n \"solc_0.8/diamond/UsingDiamondOwner.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./libraries/LibDiamond.sol\\\";\\n\\ncontract UsingDiamondOwner {\\n modifier onlyOwner() {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n require(msg.sender == ds.contractOwner, \\\"Only owner is allowed to perform this action\\\");\\n _;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/access/Ownable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address) {\\n return _getBeacon();\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_getBeacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n _upgradeBeaconToAndCall(beacon, data, false);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n\\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Clones.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create(0, ptr, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\\n instance := create2(0, ptr, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n assembly {\\n let ptr := mload(0x40)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\\n mstore(add(ptr, 0x14), shl(0x60, implementation))\\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\\n mstore(add(ptr, 0x38), shl(0x60, deployer))\\n mstore(add(ptr, 0x4c), salt)\\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\\n predicted := keccak256(add(ptr, 0x37), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/Initializable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() initializer {}\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\\n // contract may have been reentered.\\n require(_initializing ? _isConstructor() : !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} modifier, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n function _isConstructor() private view returns (bool) {\\n return !Address.isContract(address(this));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../ERC1967/ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\\n *\\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\\n * `UUPSUpgradeable` with a custom implementation of upgrades.\\n *\\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\\n address private immutable __self = address(this);\\n\\n /**\\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\\n * fail.\\n */\\n modifier onlyProxy() {\\n require(address(this) != __self, \\\"Function must be called through delegatecall\\\");\\n require(_getImplementation() == __self, \\\"Function must be called through active proxy\\\");\\n _;\\n }\\n\\n /**\\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\\n * callable on the implementing contract but not through proxies.\\n */\\n modifier notDelegated() {\\n require(address(this) == __self, \\\"UUPSUpgradeable: must not be called through delegatecall\\\");\\n _;\\n }\\n\\n /**\\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\\n */\\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\\n return _IMPLEMENTATION_SLOT;\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeTo(address newImplementation) external virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\\n * encoded in `data`.\\n *\\n * Calls {_authorizeUpgrade}.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\\n _authorizeUpgrade(newImplementation);\\n _upgradeToAndCallUUPS(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\\n * {upgradeTo} and {upgradeToAndCall}.\\n *\\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\\n *\\n * ```solidity\\n * function _authorizeUpgrade(address) internal override onlyOwner {}\\n * ```\\n */\\n function _authorizeUpgrade(address newImplementation) internal virtual;\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Address.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/Context.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Library used to query support of an interface declared via {IERC165}.\\n *\\n * Note that these functions return the actual result of the query: they do not\\n * `revert` if an interface is not supported. It is up to the caller to decide\\n * what to do in these cases.\\n */\\nlibrary ERC165Checker {\\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\\n\\n /**\\n * @dev Returns true if `account` supports the {IERC165} interface,\\n */\\n function supportsERC165(address account) internal view returns (bool) {\\n // Any contract that implements ERC165 must explicitly indicate support of\\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\\n return\\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\\n }\\n\\n /**\\n * @dev Returns true if `account` supports the interface defined by\\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\\n // query support of both ERC165 as per the spec and support of _interfaceId\\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\\n }\\n\\n /**\\n * @dev Returns a boolean array where each value corresponds to the\\n * interfaces passed in and whether they're supported or not. This allows\\n * you to batch check interfaces for a contract where your expectation\\n * is that some interfaces may not be supported.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * _Available since v3.4._\\n */\\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\\n internal\\n view\\n returns (bool[] memory)\\n {\\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\\n\\n // query support of ERC165 itself\\n if (supportsERC165(account)) {\\n // query support of each interface in interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\\n }\\n }\\n\\n return interfaceIdsSupported;\\n }\\n\\n /**\\n * @dev Returns true if `account` supports all the interfaces defined in\\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\\n *\\n * Batch-querying can lead to gas savings by skipping repeated checks for\\n * {IERC165} support.\\n *\\n * See {IERC165-supportsInterface}.\\n */\\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\\n // query support of ERC165 itself\\n if (!supportsERC165(account)) {\\n return false;\\n }\\n\\n // query support of each interface in _interfaceIds\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\\n return false;\\n }\\n }\\n\\n // all interfaces supported\\n return true;\\n }\\n\\n /**\\n * @notice Query if a contract implements an interface, does not check ERC165 support\\n * @param account The address of the contract to query for support of an interface\\n * @param interfaceId The interface identifier, as specified in ERC-165\\n * @return true if the contract at account indicates support of the interface with\\n * identifier interfaceId, false otherwise\\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\\n * the behavior of this method is undefined. This precondition can be checked\\n * with {supportsERC165}.\\n * Interface identification is specified in ERC-165.\\n */\\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\\n if (result.length < 32) return false;\\n return success && abi.decode(result, (bool));\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ERC165.sol\\\";\\n\\n/**\\n * @dev Storage based implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Storage is ERC165 {\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/introspection/IERC165.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\"\n },\n \"solc_0.8/openzeppelin/utils/StorageSlot.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\n\\ninterface ERC165 {\\n function supportsInterface(bytes4 id) external view returns (bool);\\n}\\n\\n///@notice Proxy implementing EIP173 for ownership management\\ncontract EIP173Proxy is Proxy {\\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\\n\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable {\\n _setOwner(ownerAddress);\\n _setImplementation(implementationAddress, data);\\n }\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n function owner() external view returns (address) {\\n return _owner();\\n }\\n\\n function supportsInterface(bytes4 id) external view returns (bool) {\\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\\n return true;\\n }\\n if (id == 0xFFFFFFFF) {\\n return false;\\n }\\n\\n ERC165 implementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\\n // In practise this is unlikely to be an issue.\\n try implementation.supportsInterface(id) returns (bool support) {\\n return support;\\n } catch {\\n return false;\\n }\\n }\\n\\n function transferOwnership(address newOwner) external onlyOwner {\\n _setOwner(newOwner);\\n }\\n\\n function upgradeTo(address newImplementation) external onlyOwner {\\n _setImplementation(newImplementation, \\\"\\\");\\n }\\n\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\\n _setImplementation(newImplementation, data);\\n }\\n\\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\\n\\n modifier onlyOwner() {\\n require(msg.sender == _owner(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _owner() internal view returns (address adminAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n\\n function _setOwner(address newOwner) internal {\\n address previousOwner = _owner();\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\\n }\\n emit OwnershipTransferred(previousOwner, newOwner);\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/EIP173ProxyWithReceive.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"./EIP173Proxy.sol\\\";\\n\\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\\ncontract EIP173ProxyWithReceive is EIP173Proxy {\\n constructor(\\n address implementationAddress,\\n address ownerAddress,\\n bytes memory data\\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\\n\\n receive() external payable override {}\\n}\\n\"\n },\n \"solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\\n address internal immutable _ADMIN;\\n\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _ADMIN = admin_;\\n\\n // still store it to work with EIP-1967\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, admin_)\\n }\\n emit AdminChanged(address(0), admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n\\n function _getAdmin() internal view virtual override returns (address) {\\n return _ADMIN;\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxied.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nabstract contract Proxied {\\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\\n /// It also allows these functions to be called inside a contructor\\n /// even if the contract is meant to be used without proxy\\n modifier proxied() {\\n address proxyAdminAddress = _proxyAdmin();\\n // With hardhat-deploy proxies\\n // the proxyAdminAddress is zero only for the implementation contract\\n // if the implementation contract want to be used as a standalone/immutable contract\\n // it simply has to execute the `proxied` function\\n // This ensure the proxyAdminAddress is never zero post deployment\\n // And allow you to keep the same code for both proxied contract and immutable contract\\n if (proxyAdminAddress == address(0)) {\\n // ensure can not be called twice when used outside of proxy : no admin\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(\\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\\n )\\n }\\n } else {\\n require(msg.sender == proxyAdminAddress);\\n }\\n _;\\n }\\n\\n modifier onlyProxyAdmin() {\\n require(msg.sender == _proxyAdmin(), \\\"NOT_AUTHORIZED\\\");\\n _;\\n }\\n\\n function _proxyAdmin() internal view returns (address ownerAddress) {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\\n }\\n }\\n}\\n\"\n },\n \"solc_0.8/proxy/Proxy.sol\": {\n \"content\": \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// EIP-1967\\nabstract contract Proxy {\\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\\n\\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\\n\\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\\n\\n receive() external payable virtual {\\n revert(\\\"ETHER_REJECTED\\\"); // explicit reject by default\\n }\\n\\n fallback() external payable {\\n _fallback();\\n }\\n\\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\\n\\n function _fallback() internal {\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n calldatacopy(0x0, 0x0, calldatasize())\\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\\n let retSz := returndatasize()\\n returndatacopy(0, 0, retSz)\\n switch success\\n case 0 {\\n revert(0, retSz)\\n }\\n default {\\n return(0, retSz)\\n }\\n }\\n }\\n\\n function _setImplementation(address newImplementation, bytes memory data) internal {\\n address previousImplementation;\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\\n }\\n\\n // solhint-disable-next-line security/no-inline-assembly\\n assembly {\\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\\n }\\n\\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\\n\\n if (data.length > 0) {\\n (bool success, ) = newImplementation.delegatecall(data);\\n if (!success) {\\n assembly {\\n // This assembly ensure the revert contains the exact string data\\n let returnDataSize := returndatasize()\\n returndatacopy(0, 0, returnDataSize)\\n revert(0, returnDataSize)\\n }\\n }\\n }\\n }\\n}\\n\"\n }\n },\n \"settings\": {\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 999999\n },\n \"outputSelection\": {\n \"*\": {\n \"*\": [\n \"abi\",\n \"evm.bytecode\",\n \"evm.deployedBytecode\",\n \"evm.methodIdentifiers\",\n \"metadata\",\n \"devdoc\",\n \"userdoc\",\n \"storageLayout\",\n \"evm.gasEstimates\"\n ],\n \"\": [\n \"ast\"\n ]\n }\n },\n \"metadata\": {\n \"useLiteralContent\": true\n }\n }\n}", - "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc" -} \ No newline at end of file diff --git a/extendedArtifactsTron/index.ts b/extendedArtifactsTron/index.ts deleted file mode 100644 index 2cfcad3..0000000 --- a/extendedArtifactsTron/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -export { default as Diamond } from './Diamond.json'; -export { default as UsingDiamondOwner } from './UsingDiamondOwner.json'; -export { default as DiamondCutFacet } from './DiamondCutFacet.json'; -export { default as DiamondLoupeFacet } from './DiamondLoupeFacet.json'; -export { default as DiamondLoupeFacetWithoutSupportsInterface } from './DiamondLoupeFacetWithoutSupportsInterface.json'; -export { default as OwnershipFacet } from './OwnershipFacet.json'; -export { default as DiamondERC165Init } from './DiamondERC165Init.json'; -export { default as IDiamondCut } from './IDiamondCut.json'; -export { default as IDiamondLoupe } from './IDiamondLoupe.json'; -export { default as IERC165 } from './IERC165.json'; -export { default as IERC173 } from './IERC173.json'; -export { default as LibDiamond } from './LibDiamond.json'; -export { default as Ownable } from './Ownable.json'; -export { default as IERC1822Proxiable } from './IERC1822Proxiable.json'; -export { default as Clones } from './Clones.json'; -export { default as ERC1967Proxy } from './ERC1967Proxy.json'; -export { default as ERC1967Upgrade } from './ERC1967Upgrade.json'; -export { default as Proxy } from './Proxy.json'; -export { default as BeaconProxy } from './BeaconProxy.json'; -export { default as IBeacon } from './IBeacon.json'; -export { default as UpgradeableBeacon } from './UpgradeableBeacon.json'; -export { default as ProxyAdmin } from './ProxyAdmin.json'; -export { default as TransparentUpgradeableProxy } from './TransparentUpgradeableProxy.json'; -export { default as Initializable } from './Initializable.json'; -export { default as UUPSUpgradeable } from './UUPSUpgradeable.json'; -export { default as Address } from './Address.json'; -export { default as Context } from './Context.json'; -export { default as StorageSlot } from './StorageSlot.json'; -export { default as ERC165 } from './ERC165.json'; -export { default as ERC165Checker } from './ERC165Checker.json'; -export { default as ERC165Storage } from './ERC165Storage.json'; -export { default as EIP173Proxy } from './EIP173Proxy.json'; -export { default as EIP173ProxyWithReceive } from './EIP173ProxyWithReceive.json'; -export { default as OptimizedTransparentUpgradeableProxy } from './OptimizedTransparentUpgradeableProxy.json'; -export { default as Proxied } from './Proxied.json'; diff --git a/hardhat.config.ts b/hardhat.config.ts deleted file mode 100644 index 3e6ffaa..0000000 --- a/hardhat.config.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { internalTask, task } from 'hardhat/config'; -import { - TASK_COMPILE_SOLIDITY_GET_COMPILER_INPUT, - TASK_COMPILE, -} from 'hardhat/builtin-tasks/task-names'; -import fs from 'fs-extra'; -import path from 'path'; -import { Artifact, BuildInfo } from 'hardhat/types'; -import murmur128 from 'murmur-128'; -// Somewhat counterintuive, @layerzerolabs/hardhat-deploy is a devDependency of itself. -// It is required by hardhat-tron-solc who lists this package as a peerDependency. -import { HardhatUserConfig } from '@layerzerolabs/hardhat-deploy'; - -function addIfNotPresent(array: string[], value: string) { - if (array.indexOf(value) === -1) { - array.push(value); - } -} - -function setupExtraSolcSettings(settings: { - metadata?: { useLiteralContent?: boolean }; - outputSelection: { [key: string]: { [key: string]: string[] } }; -}): void { - settings.metadata = settings.metadata || {}; - settings.metadata.useLiteralContent = true; - - if (settings.outputSelection === undefined) { - settings.outputSelection = { - '*': { - '*': [], - '': [], - }, - }; - } - if (settings.outputSelection['*'] === undefined) { - settings.outputSelection['*'] = { - '*': [], - '': [], - }; - } - if (settings.outputSelection['*']['*'] === undefined) { - settings.outputSelection['*']['*'] = []; - } - if (settings.outputSelection['*'][''] === undefined) { - settings.outputSelection['*'][''] = []; - } - - addIfNotPresent(settings.outputSelection['*']['*'], 'abi'); - addIfNotPresent(settings.outputSelection['*']['*'], 'evm.bytecode'); - addIfNotPresent(settings.outputSelection['*']['*'], 'evm.deployedBytecode'); - addIfNotPresent(settings.outputSelection['*']['*'], 'metadata'); - addIfNotPresent(settings.outputSelection['*']['*'], 'devdoc'); - addIfNotPresent(settings.outputSelection['*']['*'], 'userdoc'); - addIfNotPresent(settings.outputSelection['*']['*'], 'storageLayout'); - addIfNotPresent(settings.outputSelection['*']['*'], 'evm.methodIdentifiers'); - addIfNotPresent(settings.outputSelection['*']['*'], 'evm.gasEstimates'); - // addIfNotPresent(settings.outputSelection["*"][""], "ir"); - // addIfNotPresent(settings.outputSelection["*"][""], "irOptimized"); - // addIfNotPresent(settings.outputSelection["*"][""], "ast"); -} - -internalTask(TASK_COMPILE_SOLIDITY_GET_COMPILER_INPUT).setAction( - async (_, __, runSuper) => { - const input = await runSuper(); - setupExtraSolcSettings(input.settings); - - return input; - } -); - -task(TASK_COMPILE).setAction(async (args, hre, runSuper) => { - await runSuper(args); - - let extendedArtifactFolderpath = 'extendedArtifacts'; - if (hre.network.tron && hre.config.tronSolc.enable) { - extendedArtifactFolderpath = 'extendedArtifactsTron'; - } - fs.emptyDirSync(extendedArtifactFolderpath); - const artifactPaths = await hre.artifacts.getArtifactPaths(); - let indexFileContent = ''; // Content for index.ts - const exportedArtifacts = new Set(); // Track exported artifacts to avoid duplicates - for (const artifactPath of artifactPaths) { - const artifact: Artifact = await fs.readJSON(artifactPath); - const artifactName = path.basename(artifactPath, '.json'); - const artifactDBGPath = path.join( - path.dirname(artifactPath), - artifactName + '.dbg.json' - ); - const artifactDBG = await fs.readJSON(artifactDBGPath); - const buildinfoPath = path.join( - path.dirname(artifactDBGPath), - artifactDBG.buildInfo - ); - const buildInfo: BuildInfo = await fs.readJSON(buildinfoPath); - const output = - buildInfo.output.contracts[artifact.sourceName][artifactName]; - - // TODO decide on ExtendedArtifact vs Artifact vs Deployment type - // save space by not duplicating bytecodes - if (output.evm?.bytecode?.object) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (output.evm.bytecode.object as any) = undefined; - } - if (output.evm?.deployedBytecode?.object) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (output.evm.deployedBytecode.object as any) = undefined; - } - // ----------------------------------------- - - const solcInput = JSON.stringify(buildInfo.input, null, ' '); - const solcInputHash = Buffer.from(murmur128(solcInput)).toString('hex'); - const extendedArtifact = { - ...artifact, - ...output, - solcInput, - solcInputHash, - }; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (extendedArtifact._format as any) = undefined; - const extendedArtifactFilename = artifactName + '.json'; - fs.writeFileSync( - path.join(extendedArtifactFolderpath, extendedArtifactFilename), - JSON.stringify(extendedArtifact, null, ' ') - ); - // Add export line to indexFileContent for each unique artifact - if (!exportedArtifacts.has(artifactName)) { - indexFileContent += `export { default as ${artifactName} } from './${extendedArtifactFilename}';\n`; - exportedArtifacts.add(artifactName); - } - } - // Write the index.ts file - fs.writeFileSync( - path.join(extendedArtifactFolderpath, 'index.ts'), - indexFileContent - ); -}); - -const settings = { - optimizer: { - enabled: true, - runs: 999999, - }, -}; - -const config: HardhatUserConfig = { - solidity: { - version: '0.8.10', - settings, - }, - defaultNetwork: 'hardhat', - networks: { - tron: { - url: `http://127.0.0.1:9090/jsonrpc`, - tron: true, - }, - }, - tronSolc: { - enable: true, - compilers: [ - { - version: '0.8.11', - settings, - }, - ], - }, - paths: { - sources: 'solc_0.8', - }, -}; - -export default config; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5b3dcb1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,54 @@ +{ + "name": "sunhat", + "version": "2.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "sunhat", + "version": "2.0.0", + "license": "MIT OR Apache-2.0", + "bin": { + "sunhat": "bin/sunhat.js" + }, + "devDependencies": { + "@types/node": "22.10.2", + "typescript": "5.7.2" + }, + "engines": { + "node": ">=20.11" + } + }, + "node_modules/@types/node": { + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/package.json b/package.json index 2134be7..9af29a6 100644 --- a/package.json +++ b/package.json @@ -1,112 +1,30 @@ { - "name": "@sun-protocol/sunhat", - "version": "1.5.0", - "description": "An All-in-One Toolkit for the Complete TRON Smart Contract Lifecycle", - "repository": "https://github.com/sun-protocol/sunhat.git", - "author": "sun-protocol", - "license": "MIT", - "publishConfig": { - "access": "public" - }, - "main": "dist/src/index.js", - "types": "dist/src/index.d.ts", + "name": "sunhat", + "version": "2.0.0", + "description": "Project-bound Hardhat and Foundry CLI for EVM and TRON development", + "type": "module", + "license": "MIT OR Apache-2.0", "bin": { - "sunhat": "./dist/src/cli.js" + "sunhat": "bin/sunhat.js" }, - "keywords": [ - "ethereum", - "smart-contracts", - "deployment", - "test", - "testing", - "tool", - "hardhat", - "hardhat-plugin", - "tron" - ], "files": [ - "dist/src/", - "dist/types*", - "dist/extendedArtifacts/", - "extendedArtifacts/", - "dist/extendedArtifactsTron/", - "extendedArtifactsTron/", - "src/", - "skills/", - "types.ts", - "LICENSE", - "README.md", - "solc_0.6/", - "solc_0.7", - "solc_0.8" + "bin/", + "dist/", + "templates/", + "README.md" ], - "devDependencies": { - "@changesets/cli": "^2.11.1", - "@types/chai": "^4.2.21", - "@types/debug": "^4.1.7", - "@types/fs-extra": "^9.0.12", - "@types/mocha": "^9.0.0", - "@types/node": "^16.6.2", - "@typescript-eslint/eslint-plugin": "^4.29.2", - "@typescript-eslint/parser": "^4.29.2", - "chai": "^4.2.0", - "dotenv": "^10.0.0", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "hardhat": "^2.22.18", - "mocha": "^9.1.0", - "prettier": "^2.3.2", - "prettier-plugin-solidity": "^1.0.0-beta.17", - "solhint": "^3.3.6", - "solhint-plugin-prettier": "^0.0.5", - "source-map-support": "^0.5.12", - "ts-node": "^10.2.1", - "typescript": "^4.3.5" - }, - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/solidity": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@google/generative-ai": "^0.24.1", - "@types/glob": "^9.0.0", - "@types/qs": "^6.9.7", - "axios": "^0.21.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "colors": "^1.4.0", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "ethers": "^5.8.0", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "glob": "^13.0.0", - "match-all": "^1.2.6", - "murmur-128": "^0.2.1", - "node-fetch": "^3.3.2", - "openai": "^6.9.1", - "pnpm": "^10.6.5", - "qs": "^6.9.4", - "tronweb": "^5.3.1", - "zksync-ethers": "^5.0.0" + "engines": { + "node": ">=20.11" }, "scripts": { - "prepare": "node ./.setup.js", - "lint": "eslint \"**/*.{js,ts}\" && solhint src/**/*.sol", - "lint:fix": "eslint --fix \"**/*.{js,ts}\" && solhint --fix src/**/*.sol", - "format": "prettier --write \"**/*.{ts,js,sol}\"", - "test": "npx hardhat test", - "build": "tsc", - "watch": "tsc -w", - "publish:next": "npm publish --tag next", - "publish:release": "npm publish", - "prepublishOnly": "npm run build" + "build": "npm run clean && tsc -p tsconfig.json", + "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"", + "test": "npm run build && node --test test/cli.test.js test/init-commands.test.js test/toolchain.test.js", + "test:templates": "npm run build && node --test test/template-types.test.js", + "pack:check": "npm run build && npm pack --dry-run" + }, + "devDependencies": { + "@types/node": "22.10.2", + "typescript": "5.7.2" } } diff --git a/skills/sunhat/SKILL.md b/skills/sunhat/SKILL.md deleted file mode 100644 index c774137..0000000 --- a/skills/sunhat/SKILL.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -name: sunhat -description: Initialize, compile, test, deploy, or audit TRON smart contract projects that use the Sunhat Hardhat plugin. ---- - -# Sunhat TRON Development Skill - -Use this skill to operate the Sunhat lifecycle for TRON smart contracts. - -**Rule:** Read only the workflow file relevant to the current objective. If the request spans multiple objectives, read the required workflows in execution order. - -## Capabilities - -| Objective | Workflow File | Description | -| :--- | :--- | :--- | -| **Initialize Project** | [sunhat-init.md](workflows/sunhat-init.md) | Setup new project structure, config, and env. | -| **Compile Contracts** | [sunhat-compile.md](workflows/sunhat-compile.md) | Compile Solidity/Vyper with TRON settings. | -| **Run Tests** | [sunhat-test.md](workflows/sunhat-test.md) | Run Foundry (Solidity) or Hardhat (JS) tests. | -| **Security Audit** | [sunhat-audit.md](workflows/sunhat-audit.md) | **White Hat** Analyze, Exploit (PoC), and Report. | -| **Deploy to Network** | [sunhat-deploy.md](workflows/sunhat-deploy.md) | Deploy contracts to Mainnet/Nile/Shasta. | - -## Quick Reference - -- **CLI Tool**: `sunhat` (implicitly wraps Hardhat) -- **Config**: `hardhat.config.ts` -- **Networks**: `tron` (alias for configured TRON network) diff --git a/skills/sunhat/agents/openai.yaml b/skills/sunhat/agents/openai.yaml deleted file mode 100644 index 52e62be..0000000 --- a/skills/sunhat/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "Sunhat TRON Development" - short_description: "Build, test, deploy, and audit TRON contracts with Sunhat" - default_prompt: "Use $sunhat to inspect this project and run the appropriate TRON smart contract workflow." diff --git a/skills/sunhat/workflows/sunhat-audit.md b/skills/sunhat/workflows/sunhat-audit.md deleted file mode 100644 index 0ba750d..0000000 --- a/skills/sunhat/workflows/sunhat-audit.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -description: Perform a manual "White Hat" security audit and verify with Foundry ---- - -# Agentic Security Audit (White Hat) - -I will act as a generic **White Hat Security Researcher** to analyze your smart contracts, identify vulnerabilities, verify them with tests, and report findings. - -## Phase 1: Deep Analysis - -I will read the contract code line-by-line, looking for common and complex vulnerabilities, including but not limited to: -- Re-entrancy -- Access Control failures -- Arithmetic Over/Underflows -- Logic errors -- **Arbitrage via Special Request Data**: Constructing specific input parameters or calldata to identify profitable logical inconsistencies. -- Tron-specific issues (e.g., energy consumption, bandwidth) - -## Phase 2: Verification (Proof of Concept) - -For every potential vulnerability identified, I will **create a reproduction test case** using Foundry. - -1. **Create Test File**: Create a new test file (e.g., `test/Audit_Exploit.t.sol`). -2. **Write Exploit**: Write a Solidity test that attempts to exploit the vulnerability. -3. **Run Test**: Execute `forge test --match-test `. -4. **Confirm**: Ensure the test passes (confirming the exploit works) or fails (if the code is safe). - -```solidity -// Example PoC Structure -function testExploit() public { - vm.startPrank(attacker); - // ... perform attack ... - assertGt(attacker.balance, initialBalance); -} -``` - -## Phase 3: Reporting - -I will generate a **Bug Report** for each confirmed issue containing: -- **Title**: Concise name of the vulnerability. -- **Severity**: Critical, High, Medium, Low, Info. -- **Description**: Detailed explanation of the logic flaw. -- **Impact**: What happens if exploited (funds lost, system frozen, etc.). -- **Proof of Concept**: The Foundry test code used to verify it. -- **Recommendation**: How to fix the code. - -## Phase 4: Remediation - -Once the report is reviewed, I can assist in applying the fixes and running the PoC again to verify the patch (the test should now fail to exploit). diff --git a/skills/sunhat/workflows/sunhat-compile.md b/skills/sunhat/workflows/sunhat-compile.md deleted file mode 100644 index 225f620..0000000 --- a/skills/sunhat/workflows/sunhat-compile.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -description: Compile Solidity and Vyper contracts using Sunhat (Hardhat) ---- - -# Sunhat Compile - -I will help you compile your smart contracts, ensuring Tron compatibility. - -## Guardrails - -- Ensure `hardhat.config.ts` exists -- Check if `tronSolc` is enabled in config if using Tron-specific features - -## Steps - -### 1. Check Configuration - -- Read `hardhat.config.ts` -- Verify `networks.tron` exists and `tron: true` is set (good practice) -- Verify `tronSolc` settings if applicable - -### 2. Run Compile - -Execute the compile task: - -```bash -npx hardhat compile -``` - -### 3. Check Artifacts - -- Verify artifacts were generated in `artifacts/` -- For Tron-specific builds, check `extendedArtifactsTron/` - -### 4. Handle Errors - -If compilation fails: - -- Check for Solidity version mismatches -- Suggest installing `tronweb` if missing -- Check for "Stack too deep" or similar common Solidity errors diff --git a/skills/sunhat/workflows/sunhat-deploy.md b/skills/sunhat/workflows/sunhat-deploy.md deleted file mode 100644 index b04c47d..0000000 --- a/skills/sunhat/workflows/sunhat-deploy.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -description: Deploy contracts to the Tron network using Sunhat ---- - -# Sunhat Deploy - -I will help you deploy your contracts to the Tron network (Mainnet, Nile, Shasta). - -## Guardrails - -- **CRITICAL**: Ensure `deployTron/` folder exists (Sunhat convention) -- Verify `TRON_RPC_URL` and `PRIVATE_KEY` are configured without printing their values -- Ensure `network: tron` is configured in `hardhat.config.ts` -- Before broadcasting, show the target network, deployer address, selected tags, and exact command, then obtain explicit user confirmation - -## Steps - -### 1. Prepare Deployment Script - -- Check `deployTron/` for existing scripts -- If creating a new script, use this template: - ```typescript - import { DeployFunction } from 'hardhat-deploy/types'; - import { HardhatRuntimeEnvironment } from 'hardhat/types'; - const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - const { deployments, getNamedAccounts } = hre; - const { deploy } = deployments; - const { deployer } = await getNamedAccounts(); - await deploy('MyContract', { from: deployer, args: [], log: true }); - }; - export default func; - func.tags = ['MyContract']; - ``` - -### 2. Check Network Status - -- Verify RPC connection (optional, via curl or script) -- Check deployer balance (if possible) - -### 3. Execute Deployment - -Run the deploy command targeting the Tron network: - -```bash -npx hardhat deploy --network tron -``` - -_Optional: Add `--tags [Tag]` to run specific scripts._ - -### 4. Verify Output - -- Check console logs for "deployed at" address -- Record the transaction hash and deployed address for verification -- Check the corresponding deployment artifact under `deployments//` diff --git a/skills/sunhat/workflows/sunhat-init.md b/skills/sunhat/workflows/sunhat-init.md deleted file mode 100644 index af28850..0000000 --- a/skills/sunhat/workflows/sunhat-init.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -description: Initialize a new Sunhat project for Tron smart contract development ---- - -# Sunhat Init - -I will help you scaffold a new project using the Sunhat toolkit. - -## Guardrails - -- Check if the current directory is empty or if a new directory name is provided -- Ensure Node.js (v18+) is installed -- Do not run if `hardhat.config.ts` already exists in the current directory (unless forcing) - -## Steps - -### 1. Verify Environment - -- Check Node.js version: `node --version` -- Check if `sunhat` is installed globally: `npm list -g @sun-protocol/sunhat` (optional, can use npx) - -### 2. Determine Project Name - -- Ask the user for a project name (default to current directory if empty) - -### 3. Initialize Project - -Run the initialization command: - -```bash -sunhat init [project-name] -``` - -_Note: If `sunhat` is not in PATH, use `npx @sun-protocol/sunhat init [project-name]`_ - -### 4. Verify Structure - -After initialization, verify that the following exist: - -- `contracts/` -- `test/` -- `deployTron/` (or `deploy/`) -- `hardhat.config.ts` - -### 5. Post-Init Setup - -- Remind user to fill in `.env` with `PRIVATE_KEY` and `TRON_RPC_URL` -- Suggest running `npm install` if it wasn't run automatically diff --git a/skills/sunhat/workflows/sunhat-test.md b/skills/sunhat/workflows/sunhat-test.md deleted file mode 100644 index 77cbcdf..0000000 --- a/skills/sunhat/workflows/sunhat-test.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -description: Run comprehensive tests using Foundry (Solidity) and Hardhat (JS/TS) ---- - -# Sunhat Testing Workflow - -I will help you run and debug tests for your TRON smart contracts. - -## 1. Foundry (Solidity Testing) - Recommended - -Foundry is the preferred testing framework for its speed and solidity-native cheating capabilities. - -### Basic Testing -Run all tests: -```bash -forge test -``` - -### Advanced Filtering -- **Specific Test**: `forge test --match-test testTransfer` -- **Specific Contract**: `forge test --match-contract TokenTest` -- **Specific Path**: `forge test --match-path test/Token.t.sol` - -### Debugging & Tracing -- **Logs**: `forge test -vv` (Show logs) -- **Failure Traces**: `forge test -vvv` (Show stack traces for failures) -- **Full Traces**: `forge test -vvvv` (Show all stack traces) -- **Debugger**: `forge script script/Deploy.s.sol --debug` - -### Gas Reporting -Generate a gas report for your contracts: -```bash -forge test --gas-report -``` - -### Mainnet Forking -Test against live chain state (e.g., Nile or Mainnet): -```bash -forge test --fork-url https://nile.trongrid.io/jsonrpc -``` - ---- - -## 2. Hardhat (JS/TS Testing) - -Use Hardhat for integration tests or when JS/TS scripting is required. - -```bash -npx hardhat test -``` - -- Run specific file: `npx hardhat test test/MyContract.test.ts` -- Run with network: `npx hardhat test --network hardhat` (Default) diff --git a/solc_0.6/proxy/Proxied.sol b/solc_0.6/proxy/Proxied.sol deleted file mode 100644 index c359a46..0000000 --- a/solc_0.6/proxy/Proxied.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.6.0; - -abstract contract Proxied { - /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them - /// It also allows these functions to be called inside a contructor - /// even if the contract is meant to be used without proxy - modifier proxied() { - address proxyAdminAddress = _proxyAdmin(); - // With hardhat-deploy proxies - // the proxyAdminAddress is zero only for the implementation contract - // if the implementation contract want to be used as a standalone/immutable contract - // it simply has to execute the `proxied` function - // This ensure the proxyAdminAddress is never zero post deployment - // And allow you to keep the same code for both proxied contract and immutable contract - if (proxyAdminAddress == address(0)) { - // ensure can not be called twice when used outside of proxy : no admin - // solhint-disable-next-line security/no-inline-assembly - assembly { - sstore( - 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, - 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - ) - } - } else { - require(msg.sender == proxyAdminAddress); - } - _; - } - - modifier onlyProxyAdmin() { - require(msg.sender == _proxyAdmin(), "NOT_AUTHORIZED"); - _; - } - - function _proxyAdmin() internal view returns (address ownerAddress) { - // solhint-disable-next-line security/no-inline-assembly - assembly { - ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103) - } - } -} diff --git a/solc_0.7/diamond/UsingDiamondOwner.sol b/solc_0.7/diamond/UsingDiamondOwner.sol deleted file mode 100644 index 9bfc734..0000000 --- a/solc_0.7/diamond/UsingDiamondOwner.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.7.0; - -import "./libraries/LibDiamond.sol"; - -contract UsingDiamondOwner { - modifier onlyOwner() { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - require(msg.sender == ds.contractOwner, "Only owner is allowed to perform this action"); - _; - } -} diff --git a/solc_0.7/diamond/interfaces/IDiamondCut.sol b/solc_0.7/diamond/interfaces/IDiamondCut.sol deleted file mode 100644 index f6fc6d0..0000000 --- a/solc_0.7/diamond/interfaces/IDiamondCut.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.7.6; -pragma experimental ABIEncoderV2; - -/******************************************************************************\ -* Author: Nick Mudge (https://twitter.com/mudgen) -* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535 -/******************************************************************************/ - -interface IDiamondCut { - enum FacetCutAction {Add, Replace, Remove} - // Add=0, Replace=1, Remove=2 - - struct FacetCut { - address facetAddress; - FacetCutAction action; - bytes4[] functionSelectors; - } - - /// @notice Add/replace/remove any number of functions and optionally execute - /// a function with delegatecall - /// @param _diamondCut Contains the facet addresses and function selectors - /// @param _init The address of the contract or facet to execute _calldata - /// @param _calldata A function call, including function selector and arguments - /// _calldata is executed with delegatecall on _init - function diamondCut( - FacetCut[] calldata _diamondCut, - address _init, - bytes calldata _calldata - ) external; - - event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata); -} diff --git a/solc_0.7/diamond/libraries/LibDiamond.sol b/solc_0.7/diamond/libraries/LibDiamond.sol deleted file mode 100644 index e092ce0..0000000 --- a/solc_0.7/diamond/libraries/LibDiamond.sol +++ /dev/null @@ -1,207 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.7.6; -pragma experimental ABIEncoderV2; - -/******************************************************************************\ -* Author: Nick Mudge (https://twitter.com/mudgen) -* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535 -/******************************************************************************/ - -import "../interfaces/IDiamondCut.sol"; - -library LibDiamond { - bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); - - struct FacetAddressAndPosition { - address facetAddress; - uint16 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array - } - - struct FacetFunctionSelectors { - bytes4[] functionSelectors; - uint16 facetAddressPosition; // position of facetAddress in facetAddresses array - } - - struct DiamondStorage { - // maps function selector to the facet address and - // the position of the selector in the facetFunctionSelectors.selectors array - mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition; - // maps facet addresses to function selectors - mapping(address => FacetFunctionSelectors) facetFunctionSelectors; - // facet addresses - address[] facetAddresses; - // Used to query if a contract implements an interface. - // Used to implement ERC-165. - mapping(bytes4 => bool) supportedInterfaces; - // owner of the contract - address contractOwner; - } - - function diamondStorage() internal pure returns (DiamondStorage storage ds) { - bytes32 position = DIAMOND_STORAGE_POSITION; - assembly { - ds.slot := position - } - } - - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - function setContractOwner(address _newOwner) internal { - DiamondStorage storage ds = diamondStorage(); - address previousOwner = ds.contractOwner; - ds.contractOwner = _newOwner; - emit OwnershipTransferred(previousOwner, _newOwner); - } - - function contractOwner() internal view returns (address contractOwner_) { - contractOwner_ = diamondStorage().contractOwner; - } - - function enforceIsContractOwner() internal view { - require(msg.sender == diamondStorage().contractOwner, "LibDiamond: Must be contract owner"); - } - - event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata); - - // Internal function version of diamondCut - function diamondCut( - IDiamondCut.FacetCut[] memory _diamondCut, - address _init, - bytes memory _calldata - ) internal { - for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) { - IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action; - if (action == IDiamondCut.FacetCutAction.Add) { - addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); - } else if (action == IDiamondCut.FacetCutAction.Replace) { - replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); - } else if (action == IDiamondCut.FacetCutAction.Remove) { - removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); - } else { - revert("LibDiamondCut: Incorrect FacetCutAction"); - } - } - emit DiamondCut(_diamondCut, _init, _calldata); - initializeDiamondCut(_init, _calldata); - } - - function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { - require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); - DiamondStorage storage ds = diamondStorage(); - // uint16 selectorCount = uint16(diamondStorage().selectors.length); - require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); - uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); - // add new facet address if it does not exist - if (selectorPosition == 0) { - enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); - ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length); - ds.facetAddresses.push(_facetAddress); - } - for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { - bytes4 selector = _functionSelectors[selectorIndex]; - address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; - require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists"); - ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector); - ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress; - ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition; - selectorPosition++; - } - } - - function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { - require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); - DiamondStorage storage ds = diamondStorage(); - require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); - uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); - // add new facet address if it does not exist - if (selectorPosition == 0) { - enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); - ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length); - ds.facetAddresses.push(_facetAddress); - } - for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { - bytes4 selector = _functionSelectors[selectorIndex]; - address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; - require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function"); - removeFunction(oldFacetAddress, selector); - // add function - ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition; - ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector); - ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress; - selectorPosition++; - } - } - - function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { - require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); - DiamondStorage storage ds = diamondStorage(); - // if function does not exist then do nothing and return - require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)"); - for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { - bytes4 selector = _functionSelectors[selectorIndex]; - address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; - removeFunction(oldFacetAddress, selector); - } - } - - function removeFunction(address _facetAddress, bytes4 _selector) internal { - DiamondStorage storage ds = diamondStorage(); - require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist"); - // an immutable function is a function defined directly in a diamond - require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function"); - // replace selector with last selector, then delete last selector - uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition; - uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1; - // if not the same then replace _selector with lastSelector - if (selectorPosition != lastSelectorPosition) { - bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition]; - ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector; - ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint16(selectorPosition); - } - // delete the last selector - ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop(); - delete ds.selectorToFacetAndPosition[_selector]; - - // if no more selectors for facet address then delete the facet address - if (lastSelectorPosition == 0) { - // replace facet address with last facet address and delete last facet address - uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1; - uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; - if (facetAddressPosition != lastFacetAddressPosition) { - address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition]; - ds.facetAddresses[facetAddressPosition] = lastFacetAddress; - ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = uint16(facetAddressPosition); - } - ds.facetAddresses.pop(); - delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; - } - } - - function initializeDiamondCut(address _init, bytes memory _calldata) internal { - if (_init == address(0)) { - require(_calldata.length == 0, "LibDiamondCut: _init is address(0) but_calldata is not empty"); - } else { - require(_calldata.length > 0, "LibDiamondCut: _calldata is empty but _init is not address(0)"); - if (_init != address(this)) { - enforceHasContractCode(_init, "LibDiamondCut: _init address has no code"); - } - (bool success, bytes memory error) = _init.delegatecall(_calldata); - if (!success) { - if (error.length > 0) { - // bubble up the error - revert(string(error)); - } else { - revert("LibDiamondCut: _init function reverted"); - } - } - } - } - - function enforceHasContractCode(address _contract, string memory _errorMessage) internal view { - uint256 contractSize; - assembly { - contractSize := extcodesize(_contract) - } - require(contractSize > 0, _errorMessage); - } -} diff --git a/solc_0.7/proxy/Proxied.sol b/solc_0.7/proxy/Proxied.sol deleted file mode 100644 index d1d4a0b..0000000 --- a/solc_0.7/proxy/Proxied.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.7.0; - -abstract contract Proxied { - /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them - /// It also allows these functions to be called inside a contructor - /// even if the contract is meant to be used without proxy - modifier proxied() { - address proxyAdminAddress = _proxyAdmin(); - // With hardhat-deploy proxies - // the proxyAdminAddress is zero only for the implementation contract - // if the implementation contract want to be used as a standalone/immutable contract - // it simply has to execute the `proxied` function - // This ensure the proxyAdminAddress is never zero post deployment - // And allow you to keep the same code for both proxied contract and immutable contract - if (proxyAdminAddress == address(0)) { - // ensure can not be called twice when used outside of proxy : no admin - // solhint-disable-next-line security/no-inline-assembly - assembly { - sstore( - 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, - 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - ) - } - } else { - require(msg.sender == proxyAdminAddress); - } - _; - } - - modifier onlyProxyAdmin() { - require(msg.sender == _proxyAdmin(), "NOT_AUTHORIZED"); - _; - } - - function _proxyAdmin() internal view returns (address ownerAddress) { - // solhint-disable-next-line security/no-inline-assembly - assembly { - ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103) - } - } -} diff --git a/solc_0.8/diamond/Diamond.sol b/solc_0.8/diamond/Diamond.sol deleted file mode 100644 index 5d00edc..0000000 --- a/solc_0.8/diamond/Diamond.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -/******************************************************************************\ -* Author: Nick Mudge (https://twitter.com/mudgen) -* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 -* -* Implementation of a diamond. -/******************************************************************************/ - -import {LibDiamond} from "./libraries/LibDiamond.sol"; -import {IDiamondCut} from "./interfaces/IDiamondCut.sol"; - -contract Diamond { - struct Initialization { - address initContract; - bytes initData; - } - - /// @notice This construct a diamond contract - /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts. - /// @param _diamondCut the list of facet to add - /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization. - constructor( - address _contractOwner, - IDiamondCut.FacetCut[] memory _diamondCut, - Initialization[] memory _initializations - ) payable { - if (_contractOwner != address(0)) { - LibDiamond.setContractOwner(_contractOwner); - } - - LibDiamond.diamondCut(_diamondCut, address(0), ""); - - for (uint256 i = 0; i < _initializations.length; i++) { - LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData); - } - } - - // Find facet for function that is called and execute the - // function if a facet is found and return any value. - fallback() external payable { - LibDiamond.DiamondStorage storage ds; - bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION; - // get diamond storage - assembly { - ds.slot := position - } - // get facet from function selector - address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress; - require(facet != address(0), "Diamond: Function does not exist"); - // Execute external function from facet using delegatecall and return any value. - assembly { - // copy function selector and any arguments - calldatacopy(0, 0, calldatasize()) - // execute function call using the facet - let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0) - // get any return value - returndatacopy(0, 0, returndatasize()) - // return any return value or error back to the caller - switch result - case 0 { - revert(0, returndatasize()) - } - default { - return(0, returndatasize()) - } - } - } - - receive() external payable {} -} diff --git a/solc_0.8/diamond/UsingDiamondOwner.sol b/solc_0.8/diamond/UsingDiamondOwner.sol deleted file mode 100644 index 66bead4..0000000 --- a/solc_0.8/diamond/UsingDiamondOwner.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "./libraries/LibDiamond.sol"; - -contract UsingDiamondOwner { - modifier onlyOwner() { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - require(msg.sender == ds.contractOwner, "Only owner is allowed to perform this action"); - _; - } -} diff --git a/solc_0.8/diamond/facets/DiamondCutFacet.sol b/solc_0.8/diamond/facets/DiamondCutFacet.sol deleted file mode 100644 index bc0a69a..0000000 --- a/solc_0.8/diamond/facets/DiamondCutFacet.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -/******************************************************************************\ -* Author: Nick Mudge (https://twitter.com/mudgen) -* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 -/******************************************************************************/ - -import { IDiamondCut } from "../interfaces/IDiamondCut.sol"; -import { LibDiamond } from "../libraries/LibDiamond.sol"; - -contract DiamondCutFacet is IDiamondCut { - /// @notice Add/replace/remove any number of functions and optionally execute - /// a function with delegatecall - /// @param _diamondCut Contains the facet addresses and function selectors - /// @param _init The address of the contract or facet to execute _calldata - /// @param _calldata A function call, including function selector and arguments - /// _calldata is executed with delegatecall on _init - function diamondCut( - FacetCut[] calldata _diamondCut, - address _init, - bytes calldata _calldata - ) external override { - LibDiamond.enforceIsContractOwner(); - LibDiamond.diamondCut(_diamondCut, _init, _calldata); - } -} diff --git a/solc_0.8/diamond/facets/DiamondLoupeFacet.sol b/solc_0.8/diamond/facets/DiamondLoupeFacet.sol deleted file mode 100644 index 7bd9ce5..0000000 --- a/solc_0.8/diamond/facets/DiamondLoupeFacet.sol +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; -/******************************************************************************\ -* Author: Nick Mudge (https://twitter.com/mudgen) -* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 -/******************************************************************************/ - -import { LibDiamond } from "../libraries/LibDiamond.sol"; -import { IDiamondLoupe } from "../interfaces/IDiamondLoupe.sol"; -import { IERC165 } from "../interfaces/IERC165.sol"; - -contract DiamondLoupeFacet is IDiamondLoupe, IERC165 { - // Diamond Loupe Functions - //////////////////////////////////////////////////////////////////// - /// These functions are expected to be called frequently by tools. - // - // struct Facet { - // address facetAddress; - // bytes4[] functionSelectors; - // } - - /// @notice Gets all facets and their selectors. - /// @return facets_ Facet - function facets() external override view returns (Facet[] memory facets_) { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - uint256 numFacets = ds.facetAddresses.length; - facets_ = new Facet[](numFacets); - for (uint256 i; i < numFacets; i++) { - address facetAddress_ = ds.facetAddresses[i]; - facets_[i].facetAddress = facetAddress_; - facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors; - } - } - - /// @notice Gets all the function selectors provided by a facet. - /// @param _facet The facet address. - /// @return facetFunctionSelectors_ - function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors; - } - - /// @notice Get all the facet addresses used by a diamond. - /// @return facetAddresses_ - function facetAddresses() external override view returns (address[] memory facetAddresses_) { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - facetAddresses_ = ds.facetAddresses; - } - - /// @notice Gets the facet that supports the given selector. - /// @dev If facet is not found return address(0). - /// @param _functionSelector The function selector. - /// @return facetAddress_ The facet address. - function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress; - } - - // This implements ERC-165. - function supportsInterface(bytes4 _interfaceId) external override view returns (bool) { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - return ds.supportedInterfaces[_interfaceId]; - } -} diff --git a/solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol b/solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol deleted file mode 100644 index ce4d626..0000000 --- a/solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; -/******************************************************************************\ -* Author: Nick Mudge (https://twitter.com/mudgen) -* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 -/******************************************************************************/ - -import {LibDiamond} from "../libraries/LibDiamond.sol"; -import {IDiamondLoupe} from "../interfaces/IDiamondLoupe.sol"; - -contract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe { - // Diamond Loupe Functions - //////////////////////////////////////////////////////////////////// - /// These functions are expected to be called frequently by tools. - // - // struct Facet { - // address facetAddress; - // bytes4[] functionSelectors; - // } - - /// @notice Gets all facets and their selectors. - /// @return facets_ Facet - function facets() external view override returns (Facet[] memory facets_) { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - uint256 numFacets = ds.facetAddresses.length; - facets_ = new Facet[](numFacets); - for (uint256 i; i < numFacets; i++) { - address facetAddress_ = ds.facetAddresses[i]; - facets_[i].facetAddress = facetAddress_; - facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors; - } - } - - /// @notice Gets all the function selectors provided by a facet. - /// @param _facet The facet address. - /// @return facetFunctionSelectors_ - function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors; - } - - /// @notice Get all the facet addresses used by a diamond. - /// @return facetAddresses_ - function facetAddresses() external view override returns (address[] memory facetAddresses_) { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - facetAddresses_ = ds.facetAddresses; - } - - /// @notice Gets the facet that supports the given selector. - /// @dev If facet is not found return address(0). - /// @param _functionSelector The function selector. - /// @return facetAddress_ The facet address. - function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress; - } -} diff --git a/solc_0.8/diamond/facets/OwnershipFacet.sol b/solc_0.8/diamond/facets/OwnershipFacet.sol deleted file mode 100644 index 45cba09..0000000 --- a/solc_0.8/diamond/facets/OwnershipFacet.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import { LibDiamond } from "../libraries/LibDiamond.sol"; -import { IERC173 } from "../interfaces/IERC173.sol"; - -contract OwnershipFacet is IERC173 { - function transferOwnership(address _newOwner) external override { - LibDiamond.enforceIsContractOwner(); - LibDiamond.setContractOwner(_newOwner); - } - - function owner() external override view returns (address owner_) { - owner_ = LibDiamond.contractOwner(); - } -} diff --git a/solc_0.8/diamond/initializers/DiamondERC165Init.sol b/solc_0.8/diamond/initializers/DiamondERC165Init.sol deleted file mode 100644 index 09edb49..0000000 --- a/solc_0.8/diamond/initializers/DiamondERC165Init.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {LibDiamond} from "../libraries/LibDiamond.sol"; -import {IERC165} from "../interfaces/IERC165.sol"; - -contract DiamondERC165Init { - /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces - /// @param interfaceIds list of interface id to set as supported - /// @param interfaceIdsToRemove list of interface id to unset as supported. - /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array. - function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external { - LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); - - ds.supportedInterfaces[type(IERC165).interfaceId] = true; - - for (uint256 i = 0; i < interfaceIds.length; i++) { - ds.supportedInterfaces[interfaceIds[i]] = true; - } - - for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) { - ds.supportedInterfaces[interfaceIdsToRemove[i]] = false; - } - } -} diff --git a/solc_0.8/diamond/interfaces/IDiamondCut.sol b/solc_0.8/diamond/interfaces/IDiamondCut.sol deleted file mode 100644 index 2972f69..0000000 --- a/solc_0.8/diamond/interfaces/IDiamondCut.sol +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -/******************************************************************************\ -* Author: Nick Mudge (https://twitter.com/mudgen) -* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 -/******************************************************************************/ - -interface IDiamondCut { - enum FacetCutAction {Add, Replace, Remove} - // Add=0, Replace=1, Remove=2 - - struct FacetCut { - address facetAddress; - FacetCutAction action; - bytes4[] functionSelectors; - } - - /// @notice Add/replace/remove any number of functions and optionally execute - /// a function with delegatecall - /// @param _diamondCut Contains the facet addresses and function selectors - /// @param _init The address of the contract or facet to execute _calldata - /// @param _calldata A function call, including function selector and arguments - /// _calldata is executed with delegatecall on _init - function diamondCut( - FacetCut[] calldata _diamondCut, - address _init, - bytes calldata _calldata - ) external; - - event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata); -} diff --git a/solc_0.8/diamond/interfaces/IDiamondLoupe.sol b/solc_0.8/diamond/interfaces/IDiamondLoupe.sol deleted file mode 100644 index c3b2570..0000000 --- a/solc_0.8/diamond/interfaces/IDiamondLoupe.sol +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -/******************************************************************************\ -* Author: Nick Mudge (https://twitter.com/mudgen) -* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 -/******************************************************************************/ - -// A loupe is a small magnifying glass used to look at diamonds. -// These functions look at diamonds -interface IDiamondLoupe { - /// These functions are expected to be called frequently - /// by tools. - - struct Facet { - address facetAddress; - bytes4[] functionSelectors; - } - - /// @notice Gets all facet addresses and their four byte function selectors. - /// @return facets_ Facet - function facets() external view returns (Facet[] memory facets_); - - /// @notice Gets all the function selectors supported by a specific facet. - /// @param _facet The facet address. - /// @return facetFunctionSelectors_ - function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_); - - /// @notice Get all the facet addresses used by a diamond. - /// @return facetAddresses_ - function facetAddresses() external view returns (address[] memory facetAddresses_); - - /// @notice Gets the facet that supports the given selector. - /// @dev If facet is not found return address(0). - /// @param _functionSelector The function selector. - /// @return facetAddress_ The facet address. - function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_); -} diff --git a/solc_0.8/diamond/interfaces/IERC165.sol b/solc_0.8/diamond/interfaces/IERC165.sol deleted file mode 100644 index 04b7bcc..0000000 --- a/solc_0.8/diamond/interfaces/IERC165.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -interface IERC165 { - /// @notice Query if a contract implements an interface - /// @param interfaceId The interface identifier, as specified in ERC-165 - /// @dev Interface identification is specified in ERC-165. This function - /// uses less than 30,000 gas. - /// @return `true` if the contract implements `interfaceID` and - /// `interfaceID` is not 0xffffffff, `false` otherwise - function supportsInterface(bytes4 interfaceId) external view returns (bool); -} diff --git a/solc_0.8/diamond/interfaces/IERC173.sol b/solc_0.8/diamond/interfaces/IERC173.sol deleted file mode 100644 index a708048..0000000 --- a/solc_0.8/diamond/interfaces/IERC173.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -/// @title ERC-173 Contract Ownership Standard -/// Note: the ERC-165 identifier for this interface is 0x7f5828d0 -/* is ERC165 */ -interface IERC173 { - /// @dev This emits when ownership of a contract changes. - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - /// @notice Get the address of the owner - /// @return owner_ The address of the owner. - function owner() external view returns (address owner_); - - /// @notice Set the address of the new owner of the contract - /// @dev Set _newOwner to address(0) to renounce any ownership. - /// @param _newOwner The address of the new owner of the contract - function transferOwnership(address _newOwner) external; -} diff --git a/solc_0.8/diamond/libraries/LibDiamond.sol b/solc_0.8/diamond/libraries/LibDiamond.sol deleted file mode 100644 index a58e69a..0000000 --- a/solc_0.8/diamond/libraries/LibDiamond.sol +++ /dev/null @@ -1,207 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -/******************************************************************************\ -* Author: Nick Mudge (https://twitter.com/mudgen) -* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 -/******************************************************************************/ -import { IDiamondCut } from "../interfaces/IDiamondCut.sol"; - -library LibDiamond { - bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); - - struct FacetAddressAndPosition { - address facetAddress; - uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array - } - - struct FacetFunctionSelectors { - bytes4[] functionSelectors; - uint256 facetAddressPosition; // position of facetAddress in facetAddresses array - } - - struct DiamondStorage { - // maps function selector to the facet address and - // the position of the selector in the facetFunctionSelectors.selectors array - mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition; - // maps facet addresses to function selectors - mapping(address => FacetFunctionSelectors) facetFunctionSelectors; - // facet addresses - address[] facetAddresses; - // Used to query if a contract implements an interface. - // Used to implement ERC-165. - mapping(bytes4 => bool) supportedInterfaces; - // owner of the contract - address contractOwner; - } - - function diamondStorage() internal pure returns (DiamondStorage storage ds) { - bytes32 position = DIAMOND_STORAGE_POSITION; - assembly { - ds.slot := position - } - } - - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - function setContractOwner(address _newOwner) internal { - DiamondStorage storage ds = diamondStorage(); - address previousOwner = ds.contractOwner; - ds.contractOwner = _newOwner; - emit OwnershipTransferred(previousOwner, _newOwner); - } - - function contractOwner() internal view returns (address contractOwner_) { - contractOwner_ = diamondStorage().contractOwner; - } - - function enforceIsContractOwner() internal view { - require(msg.sender == diamondStorage().contractOwner, "LibDiamond: Must be contract owner"); - } - - event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata); - - // Internal function version of diamondCut - function diamondCut( - IDiamondCut.FacetCut[] memory _diamondCut, - address _init, - bytes memory _calldata - ) internal { - for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) { - IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action; - if (action == IDiamondCut.FacetCutAction.Add) { - addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); - } else if (action == IDiamondCut.FacetCutAction.Replace) { - replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); - } else if (action == IDiamondCut.FacetCutAction.Remove) { - removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); - } else { - revert("LibDiamondCut: Incorrect FacetCutAction"); - } - } - emit DiamondCut(_diamondCut, _init, _calldata); - initializeDiamondCut(_init, _calldata); - } - - function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { - require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); - DiamondStorage storage ds = diamondStorage(); - require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); - uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); - // add new facet address if it does not exist - if (selectorPosition == 0) { - addFacet(ds, _facetAddress); - } - for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { - bytes4 selector = _functionSelectors[selectorIndex]; - address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; - require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists"); - addFunction(ds, selector, selectorPosition, _facetAddress); - selectorPosition++; - } - } - - function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { - require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); - DiamondStorage storage ds = diamondStorage(); - require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); - uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); - // add new facet address if it does not exist - if (selectorPosition == 0) { - addFacet(ds, _facetAddress); - } - for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { - bytes4 selector = _functionSelectors[selectorIndex]; - address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; - require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function"); - removeFunction(ds, oldFacetAddress, selector); - addFunction(ds, selector, selectorPosition, _facetAddress); - selectorPosition++; - } - } - - function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { - require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); - DiamondStorage storage ds = diamondStorage(); - // if function does not exist then do nothing and return - require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)"); - for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { - bytes4 selector = _functionSelectors[selectorIndex]; - address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; - removeFunction(ds, oldFacetAddress, selector); - } - } - - function addFacet(DiamondStorage storage ds, address _facetAddress) internal { - enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); - ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length; - ds.facetAddresses.push(_facetAddress); - } - - - function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal { - ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition; - ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector); - ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress; - } - - function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { - require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist"); - // an immutable function is a function defined directly in a diamond - require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function"); - // replace selector with last selector, then delete last selector - uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition; - uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1; - // if not the same then replace _selector with lastSelector - if (selectorPosition != lastSelectorPosition) { - bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition]; - ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector; - ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition); - } - // delete the last selector - ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop(); - delete ds.selectorToFacetAndPosition[_selector]; - - // if no more selectors for facet address then delete the facet address - if (lastSelectorPosition == 0) { - // replace facet address with last facet address and delete last facet address - uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1; - uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; - if (facetAddressPosition != lastFacetAddressPosition) { - address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition]; - ds.facetAddresses[facetAddressPosition] = lastFacetAddress; - ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition; - } - ds.facetAddresses.pop(); - delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; - } - } - - function initializeDiamondCut(address _init, bytes memory _calldata) internal { - if (_init == address(0)) { - require(_calldata.length == 0, "LibDiamondCut: _init is address(0) but_calldata is not empty"); - } else { - require(_calldata.length > 0, "LibDiamondCut: _calldata is empty but _init is not address(0)"); - if (_init != address(this)) { - enforceHasContractCode(_init, "LibDiamondCut: _init address has no code"); - } - (bool success, bytes memory error) = _init.delegatecall(_calldata); - if (!success) { - if (error.length > 0) { - // bubble up the error - revert(string(error)); - } else { - revert("LibDiamondCut: _init function reverted"); - } - } - } - } - - function enforceHasContractCode(address _contract, string memory _errorMessage) internal view { - uint256 contractSize; - assembly { - contractSize := extcodesize(_contract) - } - require(contractSize > 0, _errorMessage); - } -} diff --git a/solc_0.8/openzeppelin/access/Ownable.sol b/solc_0.8/openzeppelin/access/Ownable.sol deleted file mode 100644 index f23e9ed..0000000 --- a/solc_0.8/openzeppelin/access/Ownable.sol +++ /dev/null @@ -1,76 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) - -pragma solidity ^0.8.0; - -import "../utils/Context.sol"; - -/** - * @dev Contract module which provides a basic access control mechanism, where - * there is an account (an owner) that can be granted exclusive access to - * specific functions. - * - * By default, the owner account will be the one that deploys the contract. This - * can later be changed with {transferOwnership}. - * - * This module is used through inheritance. It will make available the modifier - * `onlyOwner`, which can be applied to your functions to restrict their use to - * the owner. - */ -abstract contract Ownable is Context { - address private _owner; - - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - /** - * @dev Initializes the contract setting the deployer as the initial owner. - */ - constructor (address initialOwner) { - _transferOwnership(initialOwner); - } - - /** - * @dev Returns the address of the current owner. - */ - function owner() public view virtual returns (address) { - return _owner; - } - - /** - * @dev Throws if called by any account other than the owner. - */ - modifier onlyOwner() { - require(owner() == _msgSender(), "Ownable: caller is not the owner"); - _; - } - - /** - * @dev Leaves the contract without owner. It will not be possible to call - * `onlyOwner` functions anymore. Can only be called by the current owner. - * - * NOTE: Renouncing ownership will leave the contract without an owner, - * thereby removing any functionality that is only available to the owner. - */ - function renounceOwnership() public virtual onlyOwner { - _transferOwnership(address(0)); - } - - /** - * @dev Transfers ownership of the contract to a new account (`newOwner`). - * Can only be called by the current owner. - */ - function transferOwnership(address newOwner) public virtual onlyOwner { - require(newOwner != address(0), "Ownable: new owner is the zero address"); - _transferOwnership(newOwner); - } - - /** - * @dev Transfers ownership of the contract to a new account (`newOwner`). - * Internal function without access restriction. - */ - function _transferOwnership(address newOwner) internal virtual { - address oldOwner = _owner; - _owner = newOwner; - emit OwnershipTransferred(oldOwner, newOwner); - } -} diff --git a/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol b/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol deleted file mode 100644 index 51903ad..0000000 --- a/solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol) - -pragma solidity ^0.8.0; - -/** - * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified - * proxy whose upgrades are fully controlled by the current implementation. - */ -interface IERC1822Proxiable { - /** - * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation - * address. - * - * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks - * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this - * function revert if invoked through a proxy. - */ - function proxiableUUID() external view returns (bytes32); -} diff --git a/solc_0.8/openzeppelin/proxy/Clones.sol b/solc_0.8/openzeppelin/proxy/Clones.sol deleted file mode 100644 index 31ece8f..0000000 --- a/solc_0.8/openzeppelin/proxy/Clones.sol +++ /dev/null @@ -1,84 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol) - -pragma solidity ^0.8.0; - -/** - * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for - * deploying minimal proxy contracts, also known as "clones". - * - * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies - * > a minimal bytecode implementation that delegates all calls to a known, fixed address. - * - * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` - * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the - * deterministic method. - * - * _Available since v3.4._ - */ -library Clones { - /** - * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. - * - * This function uses the create opcode, which should never revert. - */ - function clone(address implementation) internal returns (address instance) { - assembly { - let ptr := mload(0x40) - mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) - mstore(add(ptr, 0x14), shl(0x60, implementation)) - mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) - instance := create(0, ptr, 0x37) - } - require(instance != address(0), "ERC1167: create failed"); - } - - /** - * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. - * - * This function uses the create2 opcode and a `salt` to deterministically deploy - * the clone. Using the same `implementation` and `salt` multiple time will revert, since - * the clones cannot be deployed twice at the same address. - */ - function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { - assembly { - let ptr := mload(0x40) - mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) - mstore(add(ptr, 0x14), shl(0x60, implementation)) - mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) - instance := create2(0, ptr, 0x37, salt) - } - require(instance != address(0), "ERC1167: create2 failed"); - } - - /** - * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. - */ - function predictDeterministicAddress( - address implementation, - bytes32 salt, - address deployer - ) internal pure returns (address predicted) { - assembly { - let ptr := mload(0x40) - mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) - mstore(add(ptr, 0x14), shl(0x60, implementation)) - mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000) - mstore(add(ptr, 0x38), shl(0x60, deployer)) - mstore(add(ptr, 0x4c), salt) - mstore(add(ptr, 0x6c), keccak256(ptr, 0x37)) - predicted := keccak256(add(ptr, 0x37), 0x55) - } - } - - /** - * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. - */ - function predictDeterministicAddress(address implementation, bytes32 salt) - internal - view - returns (address predicted) - { - return predictDeterministicAddress(implementation, salt, address(this)); - } -} diff --git a/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol b/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol deleted file mode 100644 index 64e9d9f..0000000 --- a/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol) - -pragma solidity ^0.8.0; - -import "../Proxy.sol"; -import "./ERC1967Upgrade.sol"; - -/** - * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an - * implementation address that can be changed. This address is stored in storage in the location specified by - * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the - * implementation behind the proxy. - */ -contract ERC1967Proxy is Proxy, ERC1967Upgrade { - /** - * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`. - * - * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded - * function call, and allows initializating the storage of the proxy like a Solidity constructor. - */ - constructor(address _logic, bytes memory _data) payable { - assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1)); - _upgradeToAndCall(_logic, _data, false); - } - - /** - * @dev Returns the current implementation address. - */ - function _implementation() internal view virtual override returns (address impl) { - return ERC1967Upgrade._getImplementation(); - } -} diff --git a/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol b/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol deleted file mode 100644 index 51fff8f..0000000 --- a/solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol +++ /dev/null @@ -1,182 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol) - -pragma solidity ^0.8.2; - -import "../beacon/IBeacon.sol"; -import "../../interfaces/draft-IERC1822.sol"; -import "../../utils/Address.sol"; -import "../../utils/StorageSlot.sol"; - -/** - * @dev This abstract contract provides getters and event emitting update functions for - * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. - * - * _Available since v4.1._ - * - * @custom:oz-upgrades-unsafe-allow delegatecall - */ -abstract contract ERC1967Upgrade { - // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1 - bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143; - - /** - * @dev Storage slot with the address of the current implementation. - * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is - * validated in the constructor. - */ - bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; - - /** - * @dev Emitted when the implementation is upgraded. - */ - event Upgraded(address indexed implementation); - - /** - * @dev Returns the current implementation address. - */ - function _getImplementation() internal view returns (address) { - return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; - } - - /** - * @dev Stores a new address in the EIP1967 implementation slot. - */ - function _setImplementation(address newImplementation) private { - require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); - StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; - } - - /** - * @dev Perform implementation upgrade - * - * Emits an {Upgraded} event. - */ - function _upgradeTo(address newImplementation) internal { - _setImplementation(newImplementation); - emit Upgraded(newImplementation); - } - - /** - * @dev Perform implementation upgrade with additional setup call. - * - * Emits an {Upgraded} event. - */ - function _upgradeToAndCall( - address newImplementation, - bytes memory data, - bool forceCall - ) internal { - _upgradeTo(newImplementation); - if (data.length > 0 || forceCall) { - Address.functionDelegateCall(newImplementation, data); - } - } - - /** - * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call. - * - * Emits an {Upgraded} event. - */ - function _upgradeToAndCallUUPS( - address newImplementation, - bytes memory data, - bool forceCall - ) internal { - // Upgrades from old implementations will perform a rollback test. This test requires the new - // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing - // this special case will break upgrade paths from old UUPS implementation to new ones. - if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) { - _setImplementation(newImplementation); - } else { - try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) { - require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID"); - } catch { - revert("ERC1967Upgrade: new implementation is not UUPS"); - } - _upgradeToAndCall(newImplementation, data, forceCall); - } - } - - /** - * @dev Storage slot with the admin of the contract. - * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is - * validated in the constructor. - */ - bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; - - /** - * @dev Emitted when the admin account has changed. - */ - event AdminChanged(address previousAdmin, address newAdmin); - - /** - * @dev Returns the current admin. - */ - function _getAdmin() internal view virtual returns (address) { - return StorageSlot.getAddressSlot(_ADMIN_SLOT).value; - } - - /** - * @dev Stores a new address in the EIP1967 admin slot. - */ - function _setAdmin(address newAdmin) private { - require(newAdmin != address(0), "ERC1967: new admin is the zero address"); - StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin; - } - - /** - * @dev Changes the admin of the proxy. - * - * Emits an {AdminChanged} event. - */ - function _changeAdmin(address newAdmin) internal { - emit AdminChanged(_getAdmin(), newAdmin); - _setAdmin(newAdmin); - } - - /** - * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. - * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor. - */ - bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; - - /** - * @dev Emitted when the beacon is upgraded. - */ - event BeaconUpgraded(address indexed beacon); - - /** - * @dev Returns the current beacon. - */ - function _getBeacon() internal view returns (address) { - return StorageSlot.getAddressSlot(_BEACON_SLOT).value; - } - - /** - * @dev Stores a new beacon in the EIP1967 beacon slot. - */ - function _setBeacon(address newBeacon) private { - require(Address.isContract(newBeacon), "ERC1967: new beacon is not a contract"); - require(Address.isContract(IBeacon(newBeacon).implementation()), "ERC1967: beacon implementation is not a contract"); - StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon; - } - - /** - * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does - * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that). - * - * Emits a {BeaconUpgraded} event. - */ - function _upgradeBeaconToAndCall( - address newBeacon, - bytes memory data, - bool forceCall - ) internal { - _setBeacon(newBeacon); - emit BeaconUpgraded(newBeacon); - if (data.length > 0 || forceCall) { - Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data); - } - } -} diff --git a/solc_0.8/openzeppelin/proxy/Proxy.sol b/solc_0.8/openzeppelin/proxy/Proxy.sol deleted file mode 100644 index cf64d08..0000000 --- a/solc_0.8/openzeppelin/proxy/Proxy.sol +++ /dev/null @@ -1,86 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol) - -pragma solidity ^0.8.0; - -/** - * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM - * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to - * be specified by overriding the virtual {_implementation} function. - * - * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a - * different contract through the {_delegate} function. - * - * The success and return data of the delegated call will be returned back to the caller of the proxy. - */ -abstract contract Proxy { - /** - * @dev Delegates the current call to `implementation`. - * - * This function does not return to its internal call site, it will return directly to the external caller. - */ - function _delegate(address implementation) internal virtual { - assembly { - // Copy msg.data. We take full control of memory in this inline assembly - // block because it will not return to Solidity code. We overwrite the - // Solidity scratch pad at memory position 0. - calldatacopy(0, 0, calldatasize()) - - // Call the implementation. - // out and outsize are 0 because we don't know the size yet. - let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) - - // Copy the returned data. - returndatacopy(0, 0, returndatasize()) - - switch result - // delegatecall returns 0 on error. - case 0 { - revert(0, returndatasize()) - } - default { - return(0, returndatasize()) - } - } - } - - /** - * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function - * and {_fallback} should delegate. - */ - function _implementation() internal view virtual returns (address); - - /** - * @dev Delegates the current call to the address returned by `_implementation()`. - * - * This function does not return to its internall call site, it will return directly to the external caller. - */ - function _fallback() internal virtual { - _beforeFallback(); - _delegate(_implementation()); - } - - /** - * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other - * function in the contract matches the call data. - */ - fallback() external payable virtual { - _fallback(); - } - - /** - * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data - * is empty. - */ - receive() external payable virtual { - _fallback(); - } - - /** - * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback` - * call, or as part of the Solidity `fallback` or `receive` functions. - * - * If overriden should call `super._beforeFallback()`. - */ - function _beforeFallback() internal virtual {} -} diff --git a/solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol b/solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol deleted file mode 100644 index 32eaa8e..0000000 --- a/solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol) - -pragma solidity ^0.8.0; - -import "./IBeacon.sol"; -import "../Proxy.sol"; -import "../ERC1967/ERC1967Upgrade.sol"; - -/** - * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}. - * - * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't - * conflict with the storage layout of the implementation behind the proxy. - * - * _Available since v3.4._ - */ -contract BeaconProxy is Proxy, ERC1967Upgrade { - /** - * @dev Initializes the proxy with `beacon`. - * - * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This - * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity - * constructor. - * - * Requirements: - * - * - `beacon` must be a contract with the interface {IBeacon}. - */ - constructor(address beacon, bytes memory data) payable { - assert(_BEACON_SLOT == bytes32(uint256(keccak256("eip1967.proxy.beacon")) - 1)); - _upgradeBeaconToAndCall(beacon, data, false); - } - - /** - * @dev Returns the current beacon address. - */ - function _beacon() internal view virtual returns (address) { - return _getBeacon(); - } - - /** - * @dev Returns the current implementation address of the associated beacon. - */ - function _implementation() internal view virtual override returns (address) { - return IBeacon(_getBeacon()).implementation(); - } - - /** - * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}. - * - * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. - * - * Requirements: - * - * - `beacon` must be a contract. - * - The implementation returned by `beacon` must be a contract. - */ - function _setBeacon(address beacon, bytes memory data) internal virtual { - _upgradeBeaconToAndCall(beacon, data, false); - } -} diff --git a/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol b/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol deleted file mode 100644 index fba3ee2..0000000 --- a/solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol) - -pragma solidity ^0.8.0; - -/** - * @dev This is the interface that {BeaconProxy} expects of its beacon. - */ -interface IBeacon { - /** - * @dev Must return an address that can be used as a delegate call target. - * - * {BeaconProxy} will check that this address is a contract. - */ - function implementation() external view returns (address); -} diff --git a/solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol b/solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol deleted file mode 100644 index a0910f1..0000000 --- a/solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol) - -pragma solidity ^0.8.0; - -import "./IBeacon.sol"; -import "../../access/Ownable.sol"; -import "../../utils/Address.sol"; - -/** - * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their - * implementation contract, which is where they will delegate all function calls. - * - * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon. - */ -contract UpgradeableBeacon is IBeacon, Ownable { - address private _implementation; - - /** - * @dev Emitted when the implementation returned by the beacon is changed. - */ - event Upgraded(address indexed implementation); - - /** - * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the - * beacon. - */ - - constructor(address implementation_, address initialOwner) Ownable(initialOwner) { - _setImplementation(implementation_); - } - - /** - * @dev Returns the current implementation address. - */ - function implementation() public view virtual override returns (address) { - return _implementation; - } - - /** - * @dev Upgrades the beacon to a new implementation. - * - * Emits an {Upgraded} event. - * - * Requirements: - * - * - msg.sender must be the owner of the contract. - * - `newImplementation` must be a contract. - */ - function upgradeTo(address newImplementation) public virtual onlyOwner { - _setImplementation(newImplementation); - emit Upgraded(newImplementation); - } - - /** - * @dev Sets the implementation contract address for this beacon - * - * Requirements: - * - * - `newImplementation` must be a contract. - */ - function _setImplementation(address newImplementation) private { - require(Address.isContract(newImplementation), "UpgradeableBeacon: implementation is not a contract"); - _implementation = newImplementation; - } -} diff --git a/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol b/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol deleted file mode 100644 index a1cdc35..0000000 --- a/solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol +++ /dev/null @@ -1,84 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol) - -pragma solidity ^0.8.0; - -import "./TransparentUpgradeableProxy.sol"; -import "../../access/Ownable.sol"; - -/** - * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an - * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}. - */ -contract ProxyAdmin is Ownable { - - constructor (address initialOwner) Ownable(initialOwner) {} - - /** - * @dev Returns the current implementation of `proxy`. - * - * Requirements: - * - * - This contract must be the admin of `proxy`. - */ - function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) { - // We need to manually run the static call since the getter cannot be flagged as view - // bytes4(keccak256("implementation()")) == 0x5c60da1b - (bool success, bytes memory returndata) = address(proxy).staticcall(hex"5c60da1b"); - require(success); - return abi.decode(returndata, (address)); - } - - /** - * @dev Returns the current admin of `proxy`. - * - * Requirements: - * - * - This contract must be the admin of `proxy`. - */ - function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) { - // We need to manually run the static call since the getter cannot be flagged as view - // bytes4(keccak256("admin()")) == 0xf851a440 - (bool success, bytes memory returndata) = address(proxy).staticcall(hex"f851a440"); - require(success); - return abi.decode(returndata, (address)); - } - - /** - * @dev Changes the admin of `proxy` to `newAdmin`. - * - * Requirements: - * - * - This contract must be the current admin of `proxy`. - */ - function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner { - proxy.changeAdmin(newAdmin); - } - - /** - * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. - * - * Requirements: - * - * - This contract must be the admin of `proxy`. - */ - function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner { - proxy.upgradeTo(implementation); - } - - /** - * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See - * {TransparentUpgradeableProxy-upgradeToAndCall}. - * - * Requirements: - * - * - This contract must be the admin of `proxy`. - */ - function upgradeAndCall( - TransparentUpgradeableProxy proxy, - address implementation, - bytes memory data - ) public payable virtual onlyOwner { - proxy.upgradeToAndCall{value: msg.value}(implementation, data); - } -} diff --git a/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol b/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol deleted file mode 100644 index 10808d5..0000000 --- a/solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol +++ /dev/null @@ -1,125 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol) - -pragma solidity ^0.8.0; - -import "../ERC1967/ERC1967Proxy.sol"; - -/** - * @dev This contract implements a proxy that is upgradeable by an admin. - * - * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector - * clashing], which can potentially be used in an attack, this contract uses the - * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two - * things that go hand in hand: - * - * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if - * that call matches one of the admin functions exposed by the proxy itself. - * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the - * implementation. If the admin tries to call a function on the implementation it will fail with an error that says - * "admin cannot fallback to proxy target". - * - * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing - * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due - * to sudden errors when trying to call a function from the proxy implementation. - * - * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, - * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. - */ -contract TransparentUpgradeableProxy is ERC1967Proxy { - /** - * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and - * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}. - */ - constructor( - address _logic, - address admin_, - bytes memory _data - ) payable ERC1967Proxy(_logic, _data) { - assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1)); - _changeAdmin(admin_); - } - - /** - * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin. - */ - modifier ifAdmin() { - if (msg.sender == _getAdmin()) { - _; - } else { - _fallback(); - } - } - - /** - * @dev Returns the current admin. - * - * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. - * - * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the - * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. - * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103` - */ - function admin() external ifAdmin returns (address admin_) { - admin_ = _getAdmin(); - } - - /** - * @dev Returns the current implementation. - * - * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. - * - * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the - * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. - * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` - */ - function implementation() external ifAdmin returns (address implementation_) { - implementation_ = _implementation(); - } - - /** - * @dev Changes the admin of the proxy. - * - * Emits an {AdminChanged} event. - * - * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}. - */ - function changeAdmin(address newAdmin) external virtual ifAdmin { - _changeAdmin(newAdmin); - } - - /** - * @dev Upgrade the implementation of the proxy. - * - * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}. - */ - function upgradeTo(address newImplementation) external ifAdmin { - _upgradeToAndCall(newImplementation, bytes(""), false); - } - - /** - * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified - * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the - * proxied contract. - * - * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}. - */ - function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin { - _upgradeToAndCall(newImplementation, data, true); - } - - /** - * @dev Returns the current admin. - */ - function _admin() internal view virtual returns (address) { - return _getAdmin(); - } - - /** - * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}. - */ - function _beforeFallback() internal virtual override { - require(msg.sender != _getAdmin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target"); - super._beforeFallback(); - } -} diff --git a/solc_0.8/openzeppelin/proxy/utils/Initializable.sol b/solc_0.8/openzeppelin/proxy/utils/Initializable.sol deleted file mode 100644 index a57b422..0000000 --- a/solc_0.8/openzeppelin/proxy/utils/Initializable.sol +++ /dev/null @@ -1,80 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol) - -pragma solidity ^0.8.0; - -import "../../utils/Address.sol"; - -/** - * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed - * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an - * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer - * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. - * - * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as - * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. - * - * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure - * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. - * - * [CAUTION] - * ==== - * Avoid leaving a contract uninitialized. - * - * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation - * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the - * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed: - * - * [.hljs-theme-light.nopadding] - * ``` - * /// @custom:oz-upgrades-unsafe-allow constructor - * constructor() initializer {} - * ``` - * ==== - */ -abstract contract Initializable { - /** - * @dev Indicates that the contract has been initialized. - */ - bool private _initialized; - - /** - * @dev Indicates that the contract is in the process of being initialized. - */ - bool private _initializing; - - /** - * @dev Modifier to protect an initializer function from being invoked twice. - */ - modifier initializer() { - // If the contract is initializing we ignore whether _initialized is set in order to support multiple - // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the - // contract may have been reentered. - require(_initializing ? _isConstructor() : !_initialized, "Initializable: contract is already initialized"); - - bool isTopLevelCall = !_initializing; - if (isTopLevelCall) { - _initializing = true; - _initialized = true; - } - - _; - - if (isTopLevelCall) { - _initializing = false; - } - } - - /** - * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the - * {initializer} modifier, directly or indirectly. - */ - modifier onlyInitializing() { - require(_initializing, "Initializable: contract is not initializing"); - _; - } - - function _isConstructor() private view returns (bool) { - return !Address.isContract(address(this)); - } -} diff --git a/solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol b/solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol deleted file mode 100644 index 4860132..0000000 --- a/solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol +++ /dev/null @@ -1,95 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol) - -pragma solidity ^0.8.0; - -import "../../interfaces/draft-IERC1822.sol"; -import "../ERC1967/ERC1967Upgrade.sol"; - -/** - * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an - * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. - * - * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is - * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing - * `UUPSUpgradeable` with a custom implementation of upgrades. - * - * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. - * - * _Available since v4.1._ - */ -abstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade { - /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment - address private immutable __self = address(this); - - /** - * @dev Check that the execution is being performed through a delegatecall call and that the execution context is - * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case - * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a - * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to - * fail. - */ - modifier onlyProxy() { - require(address(this) != __self, "Function must be called through delegatecall"); - require(_getImplementation() == __self, "Function must be called through active proxy"); - _; - } - - /** - * @dev Check that the execution is not being performed through a delegate call. This allows a function to be - * callable on the implementing contract but not through proxies. - */ - modifier notDelegated() { - require(address(this) == __self, "UUPSUpgradeable: must not be called through delegatecall"); - _; - } - - /** - * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the - * implementation. It is used to validate that the this implementation remains valid after an upgrade. - * - * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks - * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this - * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier. - */ - function proxiableUUID() external view virtual override notDelegated returns (bytes32) { - return _IMPLEMENTATION_SLOT; - } - - /** - * @dev Upgrade the implementation of the proxy to `newImplementation`. - * - * Calls {_authorizeUpgrade}. - * - * Emits an {Upgraded} event. - */ - function upgradeTo(address newImplementation) external virtual onlyProxy { - _authorizeUpgrade(newImplementation); - _upgradeToAndCallUUPS(newImplementation, new bytes(0), false); - } - - /** - * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call - * encoded in `data`. - * - * Calls {_authorizeUpgrade}. - * - * Emits an {Upgraded} event. - */ - function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy { - _authorizeUpgrade(newImplementation); - _upgradeToAndCallUUPS(newImplementation, data, true); - } - - /** - * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by - * {upgradeTo} and {upgradeToAndCall}. - * - * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}. - * - * ```solidity - * function _authorizeUpgrade(address) internal override onlyOwner {} - * ``` - */ - function _authorizeUpgrade(address newImplementation) internal virtual; -} diff --git a/solc_0.8/openzeppelin/utils/Address.sol b/solc_0.8/openzeppelin/utils/Address.sol deleted file mode 100644 index ccafe5a..0000000 --- a/solc_0.8/openzeppelin/utils/Address.sol +++ /dev/null @@ -1,222 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol) - -pragma solidity ^0.8.1; - -/** - * @dev Collection of functions related to the address type - */ -library Address { - /** - * @dev Returns true if `account` is a contract. - * - * [IMPORTANT] - * ==== - * It is unsafe to assume that an address for which this function returns - * false is an externally-owned account (EOA) and not a contract. - * - * Among others, `isContract` will return false for the following - * types of addresses: - * - * - an externally-owned account - * - a contract in construction - * - an address where a contract will be created - * - an address where a contract lived, but was destroyed - * ==== - * - * [IMPORTANT] - * ==== - * You shouldn't rely on `isContract` to protect against flash loan attacks! - * - * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets - * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract - * constructor. - * ==== - */ - function isContract(address account) internal view returns (bool) { - // This method relies on extcodesize/address.code.length, which returns 0 - // for contracts in construction, since the code is only stored at the end - // of the constructor execution. - - return account.code.length > 0; - } - - /** - * @dev Replacement for Solidity's `transfer`: sends `amount` wei to - * `recipient`, forwarding all available gas and reverting on errors. - * - * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost - * of certain opcodes, possibly making contracts go over the 2300 gas limit - * imposed by `transfer`, making them unable to receive funds via - * `transfer`. {sendValue} removes this limitation. - * - * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. - * - * IMPORTANT: because control is transferred to `recipient`, care must be - * taken to not create reentrancy vulnerabilities. Consider using - * {ReentrancyGuard} or the - * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. - */ - function sendValue(address payable recipient, uint256 amount) internal { - require(address(this).balance >= amount, "Address: insufficient balance"); - - (bool success, ) = recipient.call{value: amount}(""); - require(success, "Address: unable to send value, recipient may have reverted"); - } - - /** - * @dev Performs a Solidity function call using a low level `call`. A - * plain `call` is an unsafe replacement for a function call: use this - * function instead. - * - * If `target` reverts with a revert reason, it is bubbled up by this - * function (like regular Solidity function calls). - * - * Returns the raw returned data. To convert to the expected return value, - * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. - * - * Requirements: - * - * - `target` must be a contract. - * - calling `target` with `data` must not revert. - * - * _Available since v3.1._ - */ - function functionCall(address target, bytes memory data) internal returns (bytes memory) { - return functionCall(target, data, "Address: low-level call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with - * `errorMessage` as a fallback revert reason when `target` reverts. - * - * _Available since v3.1._ - */ - function functionCall( - address target, - bytes memory data, - string memory errorMessage - ) internal returns (bytes memory) { - return functionCallWithValue(target, data, 0, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but also transferring `value` wei to `target`. - * - * Requirements: - * - * - the calling contract must have an ETH balance of at least `value`. - * - the called Solidity function must be `payable`. - * - * _Available since v3.1._ - */ - function functionCallWithValue( - address target, - bytes memory data, - uint256 value - ) internal returns (bytes memory) { - return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); - } - - /** - * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but - * with `errorMessage` as a fallback revert reason when `target` reverts. - * - * _Available since v3.1._ - */ - function functionCallWithValue( - address target, - bytes memory data, - uint256 value, - string memory errorMessage - ) internal returns (bytes memory) { - require(address(this).balance >= value, "Address: insufficient balance for call"); - require(isContract(target), "Address: call to non-contract"); - - (bool success, bytes memory returndata) = target.call{value: value}(data); - return verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but performing a static call. - * - * _Available since v3.3._ - */ - function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { - return functionStaticCall(target, data, "Address: low-level static call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], - * but performing a static call. - * - * _Available since v3.3._ - */ - function functionStaticCall( - address target, - bytes memory data, - string memory errorMessage - ) internal view returns (bytes memory) { - require(isContract(target), "Address: static call to non-contract"); - - (bool success, bytes memory returndata) = target.staticcall(data); - return verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], - * but performing a delegate call. - * - * _Available since v3.4._ - */ - function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { - return functionDelegateCall(target, data, "Address: low-level delegate call failed"); - } - - /** - * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], - * but performing a delegate call. - * - * _Available since v3.4._ - */ - function functionDelegateCall( - address target, - bytes memory data, - string memory errorMessage - ) internal returns (bytes memory) { - require(isContract(target), "Address: delegate call to non-contract"); - - (bool success, bytes memory returndata) = target.delegatecall(data); - return verifyCallResult(success, returndata, errorMessage); - } - - /** - * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the - * revert reason using the provided one. - * - * _Available since v4.3._ - */ - function verifyCallResult( - bool success, - bytes memory returndata, - string memory errorMessage - ) internal pure returns (bytes memory) { - if (success) { - return returndata; - } else { - // Look for revert reason and bubble it up if present - if (returndata.length > 0) { - // The easiest way to bubble the revert reason is using memory via assembly - - assembly { - let returndata_size := mload(returndata) - revert(add(32, returndata), returndata_size) - } - } else { - revert(errorMessage); - } - } - } -} diff --git a/solc_0.8/openzeppelin/utils/Context.sol b/solc_0.8/openzeppelin/utils/Context.sol deleted file mode 100644 index f304065..0000000 --- a/solc_0.8/openzeppelin/utils/Context.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (utils/Context.sol) - -pragma solidity ^0.8.0; - -/** - * @dev Provides information about the current execution context, including the - * sender of the transaction and its data. While these are generally available - * via msg.sender and msg.data, they should not be accessed in such a direct - * manner, since when dealing with meta-transactions the account sending and - * paying for execution may not be the actual sender (as far as an application - * is concerned). - * - * This contract is only required for intermediate, library-like contracts. - */ -abstract contract Context { - function _msgSender() internal view virtual returns (address) { - return msg.sender; - } - - function _msgData() internal view virtual returns (bytes calldata) { - return msg.data; - } -} diff --git a/solc_0.8/openzeppelin/utils/StorageSlot.sol b/solc_0.8/openzeppelin/utils/StorageSlot.sol deleted file mode 100644 index 28239db..0000000 --- a/solc_0.8/openzeppelin/utils/StorageSlot.sol +++ /dev/null @@ -1,84 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol) - -pragma solidity ^0.8.0; - -/** - * @dev Library for reading and writing primitive types to specific storage slots. - * - * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. - * This library helps with reading and writing to such slots without the need for inline assembly. - * - * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. - * - * Example usage to set ERC1967 implementation slot: - * ``` - * contract ERC1967 { - * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; - * - * function _getImplementation() internal view returns (address) { - * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; - * } - * - * function _setImplementation(address newImplementation) internal { - * require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); - * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; - * } - * } - * ``` - * - * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._ - */ -library StorageSlot { - struct AddressSlot { - address value; - } - - struct BooleanSlot { - bool value; - } - - struct Bytes32Slot { - bytes32 value; - } - - struct Uint256Slot { - uint256 value; - } - - /** - * @dev Returns an `AddressSlot` with member `value` located at `slot`. - */ - function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { - assembly { - r.slot := slot - } - } - - /** - * @dev Returns an `BooleanSlot` with member `value` located at `slot`. - */ - function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { - assembly { - r.slot := slot - } - } - - /** - * @dev Returns an `Bytes32Slot` with member `value` located at `slot`. - */ - function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { - assembly { - r.slot := slot - } - } - - /** - * @dev Returns an `Uint256Slot` with member `value` located at `slot`. - */ - function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { - assembly { - r.slot := slot - } - } -} diff --git a/solc_0.8/openzeppelin/utils/introspection/ERC165.sol b/solc_0.8/openzeppelin/utils/introspection/ERC165.sol deleted file mode 100644 index 3bf5613..0000000 --- a/solc_0.8/openzeppelin/utils/introspection/ERC165.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) - -pragma solidity ^0.8.0; - -import "./IERC165.sol"; - -/** - * @dev Implementation of the {IERC165} interface. - * - * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check - * for the additional interface id that will be supported. For example: - * - * ```solidity - * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { - * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); - * } - * ``` - * - * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. - */ -abstract contract ERC165 is IERC165 { - /** - * @dev See {IERC165-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { - return interfaceId == type(IERC165).interfaceId; - } -} diff --git a/solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol b/solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol deleted file mode 100644 index 6a240e1..0000000 --- a/solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol +++ /dev/null @@ -1,113 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol) - -pragma solidity ^0.8.0; - -import "./IERC165.sol"; - -/** - * @dev Library used to query support of an interface declared via {IERC165}. - * - * Note that these functions return the actual result of the query: they do not - * `revert` if an interface is not supported. It is up to the caller to decide - * what to do in these cases. - */ -library ERC165Checker { - // As per the EIP-165 spec, no interface should ever match 0xffffffff - bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff; - - /** - * @dev Returns true if `account` supports the {IERC165} interface, - */ - function supportsERC165(address account) internal view returns (bool) { - // Any contract that implements ERC165 must explicitly indicate support of - // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid - return - _supportsERC165Interface(account, type(IERC165).interfaceId) && - !_supportsERC165Interface(account, _INTERFACE_ID_INVALID); - } - - /** - * @dev Returns true if `account` supports the interface defined by - * `interfaceId`. Support for {IERC165} itself is queried automatically. - * - * See {IERC165-supportsInterface}. - */ - function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) { - // query support of both ERC165 as per the spec and support of _interfaceId - return supportsERC165(account) && _supportsERC165Interface(account, interfaceId); - } - - /** - * @dev Returns a boolean array where each value corresponds to the - * interfaces passed in and whether they're supported or not. This allows - * you to batch check interfaces for a contract where your expectation - * is that some interfaces may not be supported. - * - * See {IERC165-supportsInterface}. - * - * _Available since v3.4._ - */ - function getSupportedInterfaces(address account, bytes4[] memory interfaceIds) - internal - view - returns (bool[] memory) - { - // an array of booleans corresponding to interfaceIds and whether they're supported or not - bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length); - - // query support of ERC165 itself - if (supportsERC165(account)) { - // query support of each interface in interfaceIds - for (uint256 i = 0; i < interfaceIds.length; i++) { - interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]); - } - } - - return interfaceIdsSupported; - } - - /** - * @dev Returns true if `account` supports all the interfaces defined in - * `interfaceIds`. Support for {IERC165} itself is queried automatically. - * - * Batch-querying can lead to gas savings by skipping repeated checks for - * {IERC165} support. - * - * See {IERC165-supportsInterface}. - */ - function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) { - // query support of ERC165 itself - if (!supportsERC165(account)) { - return false; - } - - // query support of each interface in _interfaceIds - for (uint256 i = 0; i < interfaceIds.length; i++) { - if (!_supportsERC165Interface(account, interfaceIds[i])) { - return false; - } - } - - // all interfaces supported - return true; - } - - /** - * @notice Query if a contract implements an interface, does not check ERC165 support - * @param account The address of the contract to query for support of an interface - * @param interfaceId The interface identifier, as specified in ERC-165 - * @return true if the contract at account indicates support of the interface with - * identifier interfaceId, false otherwise - * @dev Assumes that account contains a contract that supports ERC165, otherwise - * the behavior of this method is undefined. This precondition can be checked - * with {supportsERC165}. - * Interface identification is specified in ERC-165. - */ - function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) { - bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId); - (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams); - if (result.length < 32) return false; - return success && abi.decode(result, (bool)); - } -} diff --git a/solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol b/solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol deleted file mode 100644 index c99d9f3..0000000 --- a/solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol) - -pragma solidity ^0.8.0; - -import "./ERC165.sol"; - -/** - * @dev Storage based implementation of the {IERC165} interface. - * - * Contracts may inherit from this and call {_registerInterface} to declare - * their support of an interface. - */ -abstract contract ERC165Storage is ERC165 { - /** - * @dev Mapping of interface ids to whether or not it's supported. - */ - mapping(bytes4 => bool) private _supportedInterfaces; - - /** - * @dev See {IERC165-supportsInterface}. - */ - function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { - return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId]; - } - - /** - * @dev Registers the contract as an implementer of the interface defined by - * `interfaceId`. Support of the actual ERC165 interface is automatic and - * registering its interface id is not required. - * - * See {IERC165-supportsInterface}. - * - * Requirements: - * - * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). - */ - function _registerInterface(bytes4 interfaceId) internal virtual { - require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); - _supportedInterfaces[interfaceId] = true; - } -} diff --git a/solc_0.8/openzeppelin/utils/introspection/IERC165.sol b/solc_0.8/openzeppelin/utils/introspection/IERC165.sol deleted file mode 100644 index e8cdbdb..0000000 --- a/solc_0.8/openzeppelin/utils/introspection/IERC165.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) - -pragma solidity ^0.8.0; - -/** - * @dev Interface of the ERC165 standard, as defined in the - * https://eips.ethereum.org/EIPS/eip-165[EIP]. - * - * Implementers can declare support of contract interfaces, which can then be - * queried by others ({ERC165Checker}). - * - * For an implementation, see {ERC165}. - */ -interface IERC165 { - /** - * @dev Returns true if this contract implements the interface defined by - * `interfaceId`. See the corresponding - * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] - * to learn more about how these ids are created. - * - * This function call must use less than 30 000 gas. - */ - function supportsInterface(bytes4 interfaceId) external view returns (bool); -} diff --git a/solc_0.8/proxy/EIP173Proxy.sol b/solc_0.8/proxy/EIP173Proxy.sol deleted file mode 100644 index aae82aa..0000000 --- a/solc_0.8/proxy/EIP173Proxy.sol +++ /dev/null @@ -1,93 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "./Proxy.sol"; - -interface ERC165 { - function supportsInterface(bytes4 id) external view returns (bool); -} - -///@notice Proxy implementing EIP173 for ownership management -contract EIP173Proxy is Proxy { - // ////////////////////////// EVENTS /////////////////////////////////////////////////////////////////////// - - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - // /////////////////////// CONSTRUCTOR ////////////////////////////////////////////////////////////////////// - - constructor( - address implementationAddress, - address ownerAddress, - bytes memory data - ) payable { - _setOwner(ownerAddress); - _setImplementation(implementationAddress, data); - } - - // ///////////////////// EXTERNAL /////////////////////////////////////////////////////////////////////////// - - function owner() external view returns (address) { - return _owner(); - } - - function supportsInterface(bytes4 id) external view returns (bool) { - if (id == 0x01ffc9a7 || id == 0x7f5828d0) { - return true; - } - if (id == 0xFFFFFFFF) { - return false; - } - - ERC165 implementation; - // solhint-disable-next-line security/no-inline-assembly - assembly { - implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc) - } - - // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure - // because it is itself inside `supportsInterface` that might only get 30,000 gas. - // In practise this is unlikely to be an issue. - try implementation.supportsInterface(id) returns (bool support) { - return support; - } catch { - return false; - } - } - - function transferOwnership(address newOwner) external onlyOwner { - _setOwner(newOwner); - } - - function upgradeTo(address newImplementation) external onlyOwner { - _setImplementation(newImplementation, ""); - } - - function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner { - _setImplementation(newImplementation, data); - } - - // /////////////////////// MODIFIERS //////////////////////////////////////////////////////////////////////// - - modifier onlyOwner() { - require(msg.sender == _owner(), "NOT_AUTHORIZED"); - _; - } - - // ///////////////////////// INTERNAL ////////////////////////////////////////////////////////////////////// - - function _owner() internal view returns (address adminAddress) { - // solhint-disable-next-line security/no-inline-assembly - assembly { - adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103) - } - } - - function _setOwner(address newOwner) internal { - address previousOwner = _owner(); - // solhint-disable-next-line security/no-inline-assembly - assembly { - sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner) - } - emit OwnershipTransferred(previousOwner, newOwner); - } -} diff --git a/solc_0.8/proxy/EIP173ProxyWithReceive.sol b/solc_0.8/proxy/EIP173ProxyWithReceive.sol deleted file mode 100644 index e2ba695..0000000 --- a/solc_0.8/proxy/EIP173ProxyWithReceive.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "./EIP173Proxy.sol"; - -///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive -contract EIP173ProxyWithReceive is EIP173Proxy { - constructor( - address implementationAddress, - address ownerAddress, - bytes memory data - ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {} - - receive() external payable override {} -} diff --git a/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol b/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol deleted file mode 100644 index a2f7668..0000000 --- a/solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol +++ /dev/null @@ -1,128 +0,0 @@ -// SPDX-License-Identifier: MIT -// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol) - -pragma solidity ^0.8.0; - -import "../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol"; - -/** - * @dev This contract implements a proxy that is upgradeable by an admin. - * - * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector - * clashing], which can potentially be used in an attack, this contract uses the - * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two - * things that go hand in hand: - * - * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if - * that call matches one of the admin functions exposed by the proxy itself. - * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the - * implementation. If the admin tries to call a function on the implementation it will fail with an error that says - * "admin cannot fallback to proxy target". - * - * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing - * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due - * to sudden errors when trying to call a function from the proxy implementation. - * - * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, - * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. - */ -contract OptimizedTransparentUpgradeableProxy is ERC1967Proxy { - address internal immutable _ADMIN; - - /** - * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and - * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}. - */ - constructor( - address _logic, - address admin_, - bytes memory _data - ) payable ERC1967Proxy(_logic, _data) { - assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1)); - _ADMIN = admin_; - - // still store it to work with EIP-1967 - bytes32 slot = _ADMIN_SLOT; - // solhint-disable-next-line no-inline-assembly - assembly { - sstore(slot, admin_) - } - emit AdminChanged(address(0), admin_); - } - - /** - * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin. - */ - modifier ifAdmin() { - if (msg.sender == _getAdmin()) { - _; - } else { - _fallback(); - } - } - - /** - * @dev Returns the current admin. - * - * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. - * - * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the - * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. - * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103` - */ - function admin() external ifAdmin returns (address admin_) { - admin_ = _getAdmin(); - } - - /** - * @dev Returns the current implementation. - * - * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. - * - * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the - * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. - * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc` - */ - function implementation() external ifAdmin returns (address implementation_) { - implementation_ = _implementation(); - } - - /** - * @dev Upgrade the implementation of the proxy. - * - * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}. - */ - function upgradeTo(address newImplementation) external ifAdmin { - _upgradeToAndCall(newImplementation, bytes(""), false); - } - - /** - * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified - * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the - * proxied contract. - * - * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}. - */ - function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin { - _upgradeToAndCall(newImplementation, data, true); - } - - /** - * @dev Returns the current admin. - */ - function _admin() internal view virtual returns (address) { - return _getAdmin(); - } - - /** - * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}. - */ - function _beforeFallback() internal virtual override { - require(msg.sender != _getAdmin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target"); - super._beforeFallback(); - } - - function _getAdmin() internal view virtual override returns (address) { - return _ADMIN; - } -} diff --git a/solc_0.8/proxy/Proxied.sol b/solc_0.8/proxy/Proxied.sol deleted file mode 100644 index 4370a2a..0000000 --- a/solc_0.8/proxy/Proxied.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -abstract contract Proxied { - /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them - /// It also allows these functions to be called inside a contructor - /// even if the contract is meant to be used without proxy - modifier proxied() { - address proxyAdminAddress = _proxyAdmin(); - // With hardhat-deploy proxies - // the proxyAdminAddress is zero only for the implementation contract - // if the implementation contract want to be used as a standalone/immutable contract - // it simply has to execute the `proxied` function - // This ensure the proxyAdminAddress is never zero post deployment - // And allow you to keep the same code for both proxied contract and immutable contract - if (proxyAdminAddress == address(0)) { - // ensure can not be called twice when used outside of proxy : no admin - // solhint-disable-next-line security/no-inline-assembly - assembly { - sstore( - 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, - 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - ) - } - } else { - require(msg.sender == proxyAdminAddress); - } - _; - } - - modifier onlyProxyAdmin() { - require(msg.sender == _proxyAdmin(), "NOT_AUTHORIZED"); - _; - } - - function _proxyAdmin() internal view returns (address ownerAddress) { - // solhint-disable-next-line security/no-inline-assembly - assembly { - ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103) - } - } -} diff --git a/solc_0.8/proxy/Proxy.sol b/solc_0.8/proxy/Proxy.sol deleted file mode 100644 index f557879..0000000 --- a/solc_0.8/proxy/Proxy.sol +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -// EIP-1967 -abstract contract Proxy { - // /////////////////////// EVENTS /////////////////////////////////////////////////////////////////////////// - - event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation); - - // ///////////////////// EXTERNAL /////////////////////////////////////////////////////////////////////////// - - receive() external payable virtual { - revert("ETHER_REJECTED"); // explicit reject by default - } - - fallback() external payable { - _fallback(); - } - - // ///////////////////////// INTERNAL ////////////////////////////////////////////////////////////////////// - - function _fallback() internal { - // solhint-disable-next-line security/no-inline-assembly - assembly { - let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc) - calldatacopy(0x0, 0x0, calldatasize()) - let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0) - let retSz := returndatasize() - returndatacopy(0, 0, retSz) - switch success - case 0 { - revert(0, retSz) - } - default { - return(0, retSz) - } - } - } - - function _setImplementation(address newImplementation, bytes memory data) internal { - address previousImplementation; - // solhint-disable-next-line security/no-inline-assembly - assembly { - previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc) - } - - // solhint-disable-next-line security/no-inline-assembly - assembly { - sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation) - } - - emit ProxyImplementationUpdated(previousImplementation, newImplementation); - - if (data.length > 0) { - (bool success, ) = newImplementation.delegatecall(data); - if (!success) { - assembly { - // This assembly ensure the revert contains the exact string data - let returnDataSize := returndatasize() - returndatacopy(0, 0, returnDataSize) - revert(0, returnDataSize) - } - } - } - } -} diff --git a/src/DeploymentFactory.ts b/src/DeploymentFactory.ts deleted file mode 100644 index 05fe3db..0000000 --- a/src/DeploymentFactory.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { - TransactionReceipt, - TransactionRequest, - TransactionResponse, -} from '@ethersproject/providers'; -import { ContractFactory, PayableOverrides, Signer, ethers } from 'ethers'; -import { Artifact } from 'hardhat/types'; -import * as zk from 'zksync-ethers'; -import { Address, Deployment, DeployOptions, ExtendedArtifact } from '../types'; -import { getAddress } from '@ethersproject/address'; -import { keccak256 as solidityKeccak256 } from '@ethersproject/solidity'; -import { hexConcat } from '@ethersproject/bytes'; -import { TronContractFactory } from './tron/contract'; -import { TronSigner } from './tron/signer'; -import { CreateSmartContract } from './tron/types'; - -export class DeploymentFactory { - private factory: ContractFactory; - private artifact: Artifact | ExtendedArtifact; - private isZkSync: boolean; - private isTron: boolean; - private getArtifact: (name: string) => Promise; - private overrides: PayableOverrides; - private args: any[]; - constructor( - getArtifact: (name: string) => Promise, - artifact: Artifact | ExtendedArtifact, - args: any[], - network: any, - ethersSigner?: Signer | zk.Signer | TronSigner, - overrides: PayableOverrides = {} - ) { - this.overrides = overrides; - this.getArtifact = getArtifact; - this.isZkSync = network.zksync; - this.isTron = network.tron; - this.artifact = artifact; - if (this.isZkSync) { - this.factory = new zk.ContractFactory( - artifact.abi, - artifact.bytecode, - ethersSigner as zk.Signer - ); - } else if (this.isTron) { - let contractName = ''; - if ('contractName' in artifact) ({ contractName } = artifact); - this.factory = new TronContractFactory( - artifact.abi, - artifact.bytecode, - ethersSigner as TronSigner, - contractName - ); - } else { - this.factory = new ContractFactory( - artifact.abi, - artifact.bytecode, - ethersSigner - ); - } - const numArguments = this.factory.interface.deploy.inputs.length; - if (args.length !== numArguments) { - throw new Error( - `expected ${numArguments} constructor arguments, got ${args.length}` - ); - } - this.args = args; - } - - public async extractFactoryDeps(artifact: any): Promise { - const visited = new Set(); - visited.add(`${artifact.sourceName}:${artifact.contractName}`); - return await this._extractFactoryDepsRecursive(artifact, visited); - } - - private async _extractFactoryDepsRecursive( - artifact: any, - visited: Set - ): Promise { - // Load all the dependency bytecodes. - // We transform it into an array of bytecodes. - const factoryDeps: string[] = []; - for (const dependencyHash in artifact.factoryDeps) { - if (!dependencyHash) continue; - const dependencyContract = artifact.factoryDeps[dependencyHash]; - if (!visited.has(dependencyContract)) { - const dependencyArtifact = await this.getArtifact(dependencyContract); - factoryDeps.push(dependencyArtifact.bytecode); - visited.add(dependencyContract); - const transitiveDeps = await this._extractFactoryDepsRecursive( - dependencyArtifact, - visited - ); - factoryDeps.push(...transitiveDeps); - } - } - return factoryDeps; - } - - public async getDeployTransaction(): Promise { - let overrides = this.overrides; - if (this.isZkSync) { - const factoryDeps = await this.extractFactoryDeps(this.artifact); - const customData = { - customData: { - factoryDeps, - feeToken: zk.utils.ETH_ADDRESS, - }, - }; - overrides = { - ...overrides, - ...customData, - }; - } - - return this.factory.getDeployTransaction(...this.args, overrides); - } - - // TVM formula is identical than EVM except for the prefix: keccak256( 0x41 ++ address ++ salt ++ keccak256(init_code))[12:] - // https://developers.tron.network/v4.4.0/docs/vm-vs-evm#tvm-is-basically-compatible-with-evm-with-some-differences-in-details - private async calculateEvmCreate2Address( - create2DeployerAddress: Address, - salt: string, - isTron?: boolean - ): Promise
{ - const deploymentTx = await this.getDeployTransaction(); - if (typeof deploymentTx.data !== 'string') { - throw Error('unsigned tx data as bytes not supported'); - } - const prefix = isTron ? '0x41' : '0xff'; - return getAddress( - '0x' + - solidityKeccak256( - ['bytes'], - [ - `${prefix}${create2DeployerAddress.slice(2)}${salt.slice( - 2 - )}${solidityKeccak256(['bytes'], [deploymentTx.data]).slice(2)}`, - ] - ).slice(-40) - ); - } - - private async calculateZkCreate2Address( - create2DeployerAddress: Address, - salt: string - ): Promise
{ - const bytecodeHash = zk.utils.hashBytecode(this.artifact.bytecode); - const constructor = this.factory.interface.encodeDeploy(this.args); - return zk.utils.create2Address( - create2DeployerAddress, - bytecodeHash, - salt, - constructor - ); - } - - public async getCreate2Address( - create2DeployerAddress: Address, - create2Salt: string - ): Promise
{ - if (this.isZkSync) - return await this.calculateZkCreate2Address( - create2DeployerAddress, - create2Salt - ); - return await this.calculateEvmCreate2Address( - create2DeployerAddress, - create2Salt, - this.isTron - ); - } - - public async compareDeploymentTransaction( - transaction: TransactionResponse, - deployment: Deployment - ): Promise { - const newTransaction = await this.getDeployTransaction(); - const newData = newTransaction.data?.toString(); - if (this.isZkSync) { - const currentFlattened = hexConcat(deployment.factoryDeps || []); - const newFlattened = hexConcat(newTransaction.customData?.factoryDeps); - - return transaction.data !== newData || currentFlattened != newFlattened; - } else if (this.isTron) { - const tronDeployTx = newTransaction as CreateSmartContract; - const res = await ( - this.factory.signer as TronSigner - ).getTronWebTransaction(transaction.hash); - const contract = res.raw_data.contract[0]; - const deployed_bytecode = contract.parameter.value.new_contract?.bytecode; - const newBytecode = tronDeployTx.bytecode + tronDeployTx.rawParameter; - return deployed_bytecode !== newBytecode; - } else { - return transaction.data !== newData; - } - } - - getDeployedAddress( - receipt: TransactionReceipt, - options: DeployOptions, - create2Address: string | undefined - ): string { - if (options.deterministicDeployment && create2Address) { - return create2Address; - } - - if (this.isZkSync) { - const deployedAddresses = zk.utils - .getDeployedContracts(receipt) - .map((info) => info.deployedAddress); - - return deployedAddresses[deployedAddresses.length - 1]; - } - - return receipt.contractAddress; - } -} diff --git a/src/DeploymentsManager.ts b/src/DeploymentsManager.ts deleted file mode 100644 index 904ec4b..0000000 --- a/src/DeploymentsManager.ts +++ /dev/null @@ -1,1603 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { - DeployFunction, - Deployment, - DeploymentsExtension, - FixtureFunc, - DeploymentSubmission, - Export, - DeterministicDeploymentInfo, -} from '../types'; -import { ExtendedArtifact } from '../types'; -import { PartialExtension } from './internal/types'; - -import fs from 'fs-extra'; -import path from 'path'; - -import { BigNumber } from '@ethersproject/bignumber'; - -import debug from 'debug'; -const log = debug('hardhat:sun-protocol:tron-studio'); - -import { - addDeployments, - processNamedAccounts, - loadAllDeployments, - traverseMultipleDirectory, - deleteDeployments, - getExtendedArtifactFromFolders, - getArtifactFromFolders, - getNetworkName, - getDeployPaths, -} from './utils'; -import { addHelpers, waitForTx } from './helpers'; -import { TransactionResponse } from '@ethersproject/providers'; -import { Artifact, HardhatRuntimeEnvironment, Network } from 'hardhat/types'; -import { store } from './globalStore'; -import { bnReplacer } from './internal/utils'; - -export class DeploymentsManager { - public deploymentsExtension: DeploymentsExtension; - - private db: { - gasUsed: BigNumber; - bandwith: BigNumber; - accountsLoaded: boolean; - namedAccounts: { [name: string]: string }; - unnamedAccounts: string[]; - deploymentsLoaded: boolean; - deployments: Record; - writeDeploymentsToFiles: boolean; - fixtureCounter: number; - snapshotCounter: number; - pastFixtures: { - [name: string]: { - index: number; - data?: any; - blockHash: string; - snapshot: any; - deployments: any; - }; - }; - logEnabled: boolean; - pendingTransactions: { [hash: string]: any }; - savePendingTx: boolean; - gasPrice?: string; - maxFeePerGas?: string; - maxPriorityFeePerGas?: string; - migrations: { [id: string]: number }; - onlyArtifacts?: string[]; - runAsNode: boolean; - }; - - private env: HardhatRuntimeEnvironment; - private deploymentsPath: string; - - public impersonateUnknownAccounts: boolean; - public impersonatedAccounts: string[]; - public addressesToProtocol: { [address: string]: string } = {}; - public readonly isTronNetworkWithTronSolc: boolean = false; - - private network: Network; - - private partialExtension: PartialExtension; - - private utils: { - dealWithPendingTransactions: ( - pendingTxs: { - [txHash: string]: { - name: string; - deployment?: any; - rawTx: string; - decoded: { - from: string; - gasPrice?: string; - maxFeePerGas?: string; - maxPriorityFeePerGas?: string; - gasLimit: string; - to: string; - value: string; - nonce: number; - data: string; - r: string; - s: string; - v: number; - // creates: tx.creates, // TODO test - chainId: number; - }; - }; - }, - pendingTxPath: string, - globalGasPrice: string | undefined - ) => Promise; - }; - - constructor(env: HardhatRuntimeEnvironment, network: Network) { - log('constructing DeploymentsManager'); - - this.network = network; - - this.impersonateUnknownAccounts = true; - this.impersonatedAccounts = []; - this.db = { - gasUsed: BigNumber.from(0), - bandwith: BigNumber.from(0), - accountsLoaded: false, - namedAccounts: {}, - unnamedAccounts: [], - deploymentsLoaded: false, - deployments: {}, - migrations: {}, - writeDeploymentsToFiles: true, // should default to true ? so we can run scripts that use `deploy` by default - fixtureCounter: 0, - snapshotCounter: 0, - pastFixtures: {}, - logEnabled: process.env['HARDHAT_DEPLOY_LOG'] ? true : false, - pendingTransactions: {}, - savePendingTx: false, - gasPrice: undefined, - runAsNode: false, - }; - this.env = env; - if (network.tron && (this.env.config as any)?.tronSolc?.enable) { - this.isTronNetworkWithTronSolc = true; - } - this.deploymentsPath = env.config.paths.deployments; - - // TODO - // this.env.artifacts = new HardhatDeployArtifacts(this.env.artifacts); - - this.partialExtension = { - readDotFile: async (name: string): Promise => - this.readDotFile(name), - saveDotFile: async (name: string, content: string): Promise => - this.saveDotFile(name, content), - deleteDotFile: async (name: string): Promise => - this.deleteDotFile(name), - save: async ( - name: string, - deployment: DeploymentSubmission - ): Promise => { - await this.saveDeployment(name, deployment); - }, - delete: async (name: string): Promise => - this.deleteDeployment(name), - get: async (name: string) => { - await this.setup(false); - const deployment = this.db.deployments[name]; - if (deployment === undefined) { - throw new Error(`No deployment found for: ${name}`); - } - return deployment; - }, - getOrNull: async (name: string) => { - await this.setup(false); - return this.db.deployments[name]; - }, - getDeploymentsFromAddress: async (address: string) => { - const deployments: Deployment[] = []; - for (const deployment of Object.values(this.db.deployments)) { - if (deployment.address === address) { - deployments.push(deployment); - } - } - return deployments; - }, - all: async () => { - await this.setup(false); - return this.db.deployments; // TODO copy - }, - getArtifact: async (contractName: string): Promise => { - if (this.db.onlyArtifacts) { - const artifactFromFolder = await getArtifactFromFolders( - contractName, - this.db.onlyArtifacts - ); - if (!artifactFromFolder) { - throw new Error( - `cannot find artifact "${contractName}" from folder ${this.db.onlyArtifacts}` - ); - } - return artifactFromFolder as Artifact; - } - let artifact: Artifact | ExtendedArtifact | undefined = - await getArtifactFromFolders(contractName, [ - this.env.config.paths.artifacts, - ]); - if (artifact) { - return artifact as Artifact; - } - const importPaths = this.getImportPaths(); - artifact = await getArtifactFromFolders(contractName, importPaths); - - if (!artifact) { - throw new Error(`cannot find artifact "${contractName}"`); - } - return artifact as Artifact; - }, - getExtendedArtifact: async ( - contractName: string - ): Promise => { - if (this.db.onlyArtifacts) { - // For the Tron network there is already a mechanism in this file to ensure onlyArtifacts can only point to artifacts folder ending in -tron - // We assume those artifacts folder ending in -tron are compatible with Tron and have been compiled with tron-solc - const artifactFromFolder = await getExtendedArtifactFromFolders( - contractName, - this.db.onlyArtifacts - ); - if (!artifactFromFolder) { - throw new Error( - `cannot find artifact "${contractName}" from folder ${this.db.onlyArtifacts}` - ); - } - return artifactFromFolder as ExtendedArtifact; - } - let artifact: ExtendedArtifact | undefined = - await getExtendedArtifactFromFolders(contractName, [ - this.env.config.paths.artifacts, - ]); - if (artifact) { - return artifact; - } - const importPaths = this.getImportPaths(); - artifact = await getExtendedArtifactFromFolders( - contractName, - importPaths - ); - if (artifact) { - return artifact; - } - - if (!artifact) { - throw new Error(`cannot find artifact "${contractName}"`); - } - return artifact; - }, - run: ( - tags?: string | string[], - options: { - resetMemory?: boolean; - deletePreviousDeployments?: boolean; - writeDeploymentsToFiles?: boolean; - export?: string; - exportAll?: string; - } = { - resetMemory: true, - writeDeploymentsToFiles: false, - deletePreviousDeployments: false, - } - ) => { - return this.runDeploy(tags, { - resetMemory: - options.resetMemory === undefined ? true : options.resetMemory, - deletePreviousDeployments: - options.deletePreviousDeployments === undefined - ? false - : options.deletePreviousDeployments, - writeDeploymentsToFiles: - options.writeDeploymentsToFiles === undefined - ? false - : options.writeDeploymentsToFiles, - export: options.export, - exportAll: options.exportAll, - log: false, - savePendingTx: false, - }); - }, - fixture: async ( - tags?: string | string[], - options?: { - fallbackToGlobal?: boolean; - keepExistingDeployments?: boolean; - } - ) => { - await this.setup(tags === undefined); - options = { fallbackToGlobal: true, ...options }; - if (typeof tags === 'string') { - tags = [tags]; - } - const globalKey = '::global'; - const globalFixture = this.db.pastFixtures[globalKey]; - - let fixtureKey = globalKey; - if (tags !== undefined) { - fixtureKey = '::' + tags.join('.'); - } - - if (this.db.pastFixtures[fixtureKey]) { - const pastFixture = this.db.pastFixtures[fixtureKey]; - const success = await this.revertSnapshot(pastFixture); - if (success) { - return this.db.deployments; - } else { - delete this.db.pastFixtures[fixtureKey]; - } - } - if (globalFixture && options.fallbackToGlobal) { - const success = await this.revertSnapshot(globalFixture); - if (success) { - return this.db.deployments; - } else { - delete this.db.pastFixtures[globalKey]; - } - } - await this.runDeploy(tags, { - resetMemory: !options.keepExistingDeployments, - writeDeploymentsToFiles: false, - deletePreviousDeployments: false, - log: false, - savePendingTx: false, - }); - - await this.saveSnapshot(fixtureKey); - return this.db.deployments; - }, - createFixture: (func: FixtureFunc) => { - const baseId = '' + ++this.db.fixtureCounter + '::'; - return async (options?: O) => { - let id = baseId; - if (options !== undefined) { - id = id + JSON.stringify(options, bnReplacer); - } - const saved = this.db.pastFixtures[id]; - if (saved) { - const success = await this.revertSnapshot(saved); - if (success) { - return saved.data; - } - } - const data = await func(this.env, options); - await this.saveSnapshot(id, data); - return data; - }; - }, - log: (...args: any[]) => { - if (this.db.logEnabled) { - console.log(...args); - } - }, - getNetworkName: () => this.getNetworkName(), - getGasUsed: () => this.db.gasUsed.toNumber(), - getBandwith: () => this.db.bandwith.toNumber(), - isTronNetworkWithTronSolc: this.isTronNetworkWithTronSolc, - } as PartialExtension; - - const print = (msg: string) => { - if (this.db.logEnabled) { - process.stdout.write(msg); - } - }; - - log('adding helpers'); - const helpers = addHelpers( - this, - this.partialExtension, - this.network, - this.partialExtension.getArtifact, - async ( - name: string, - deployment: DeploymentSubmission, - artifactName?: string - ): Promise => { - if ( - artifactName && - this.db.writeDeploymentsToFiles && - this.network.saveDeployments - ) { - // toSave (see deployments.save function) - const extendedArtifact = - await this.partialExtension.getExtendedArtifact(artifactName); - deployment = { - ...deployment, - ...extendedArtifact, - }; - } - await this.partialExtension.save(name, deployment); - }, - () => { - return this.db.writeDeploymentsToFiles && this.network.saveDeployments; - }, - this.onPendingTx.bind(this), - async () => { - // TODO extraGasPrice ? - let gasPrice: BigNumber | undefined; - let maxFeePerGas: BigNumber | undefined; - let maxPriorityFeePerGas: BigNumber | undefined; - if (this.db.gasPrice) { - gasPrice = BigNumber.from(this.db.gasPrice); - } else { - if (this.db.maxFeePerGas) { - maxFeePerGas = BigNumber.from(this.db.maxFeePerGas); - } - if (this.db.maxPriorityFeePerGas) { - maxPriorityFeePerGas = BigNumber.from(this.db.maxPriorityFeePerGas); - } - } - return { gasPrice, maxFeePerGas, maxPriorityFeePerGas }; - }, - this.partialExtension.log, - print - ); - - this.deploymentsExtension = helpers.extension; - this.utils = helpers.utils; - } - - private networkWasSetup = false; - public setupNetwork(): void { - if (this.networkWasSetup) { - return; - } - // reassign network variables based on fork name if any; - const networkName = this.getNetworkName(); - if (networkName !== this.network.name) { - const networkObject = store.networks[networkName]; - if (networkObject) { - this.env.network.live = networkObject.live; - this.env.network.tags = networkObject.tags; - this.env.network.deploy = networkObject.deploy; - } - } - this.networkWasSetup = true; - } - - private _chainId: string | undefined; - public async getChainId(): Promise { - if (this._chainId) { - return this._chainId; - } - this.setupNetwork(); - try { - this._chainId = await this.network.provider.send('eth_chainId'); - } catch (e) { - console.log('failed to get chainId, falling back on net_version...'); - this._chainId = await this.network.provider.send('net_version'); - } - - if (!this._chainId) { - throw new Error(`could not get chainId from network`); - } - - if (this._chainId.startsWith('0x')) { - this._chainId = BigNumber.from(this._chainId).toString(); - } - - return this._chainId; - } - - public runAsNode(enabled: boolean): void { - this.db.runAsNode = enabled; - } - - public async dealWithPendingTransactions(): Promise { - let pendingTxs: { - [txHash: string]: { - name: string; - deployment?: any; - rawTx: string; - decoded: { - from: string; - gasPrice?: string; - maxFeePerGas?: string; - maxPriorityFeePerGas?: string; - gasLimit: string; - to: string; - value: string; - nonce: number; - data: string; - r: string; - s: string; - v: number; - // creates: tx.creates, // TODO test - chainId: number; - }; - }; - } = {}; - const pendingTxPath = path.join( - this.deploymentsPath, - this.deploymentFolder(), - '.pendingTransactions' - ); - try { - pendingTxs = JSON.parse(fs.readFileSync(pendingTxPath).toString()); - } catch (e) {} - await this.utils.dealWithPendingTransactions( - pendingTxs, - pendingTxPath, - this.db.gasPrice - ); - } - - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - public async onPendingTx( - tx: TransactionResponse, - name?: string, - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - deployment?: any - ): Promise { - if ( - this.db.writeDeploymentsToFiles && - this.network.saveDeployments && - this.db.savePendingTx - ) { - const deployFolderPath = path.join( - this.deploymentsPath, - this.deploymentFolder() - ); - // console.log("tx", tx.hash); - const pendingTxPath = path.join(deployFolderPath, '.pendingTransactions'); - fs.ensureDirSync(deployFolderPath); - const rawTx = tx.raw; - const decoded = tx.raw - ? undefined - : { - from: tx.from, - gasPrice: tx.gasPrice?.toString(), - maxFeePerGas: tx.maxFeePerGas?.toString(), - maxPriorityFeePerGas: tx.maxPriorityFeePerGas?.toString(), - gasLimit: tx.gasLimit.toString(), - to: tx.to, - value: tx.value.toString(), - nonce: tx.nonce, - data: tx.data, - r: tx.r, - s: tx.s, - v: tx.v, - // creates: tx.creates, // TODO test - chainId: tx.chainId, - }; - this.db.pendingTransactions[tx.hash] = name - ? { name, deployment, rawTx, decoded } - : { rawTx, decoded }; - fs.writeFileSync( - pendingTxPath, - JSON.stringify(this.db.pendingTransactions, bnReplacer, ' ') - ); - // await new Promise(r => setTimeout(r, 20000)); - const wait = tx.wait.bind(tx); - tx.wait = async (confirmations?: number) => { - const receipt = await wait(confirmations); - // console.log("checking pending tx..."); - delete this.db.pendingTransactions[tx.hash]; - if (Object.keys(this.db.pendingTransactions).length === 0) { - fs.removeSync(pendingTxPath); - } else { - fs.writeFileSync( - pendingTxPath, - JSON.stringify(this.db.pendingTransactions, bnReplacer, ' ') - ); - } - this.db.gasUsed = this.db.gasUsed.add(receipt.gasUsed); - if (rawTx) { - this.db.bandwith = this.db.bandwith.add(rawTx?.length); - } - return receipt; - }; - } else { - const wait = tx.wait.bind(tx); - tx.wait = async (confirmations?: number) => { - const receipt = await wait(confirmations); - this.db.gasUsed = this.db.gasUsed.add(receipt.gasUsed); - return receipt; - }; - } - return tx; - } - - public async getNamedAccounts(): Promise<{ [name: string]: string }> { - await this.setupAccounts(); - return this.db.namedAccounts; - } - - public async getUnnamedAccounts(): Promise { - await this.setupAccounts(); - return this.db.unnamedAccounts; - } - - private async getDeterminisityDeploymentInfo(): Promise< - DeterministicDeploymentInfo | undefined - > { - const chainId = await this.getChainId(); - const config = this.env.config.deterministicDeployment; - return typeof config == 'function' ? config(chainId) : config?.[chainId]; - } - - public async getDeterministicDeploymentFactoryAddress(): Promise { - const info = await this.getDeterminisityDeploymentInfo(); - return info?.factory || '0x4e59b44847b379578588920ca78fbf26c0b4956c'; - } - - public async getDeterministicDeploymentFactoryDeployer(): Promise { - const info = await this.getDeterminisityDeploymentInfo(); - return info?.deployer || '0x3fab184622dc19b6109349b94811493bf2a45362'; - } - - public async getDeterministicDeploymentFactoryFunding( - isTron?: any - ): Promise { - const info = await this.getDeterminisityDeploymentInfo(); - // TODO check sensible default for Tron - // accounting for the fact that TRX has 6 decimal places instead of 18 - const funding_default = isTron ? '100000' : '10000000000000000'; - return BigNumber.from(info?.funding || funding_default); - } - - public async getDeterministicDeploymentFactoryDeploymentTx(): Promise { - const info = await this.getDeterminisityDeploymentInfo(); - return ( - info?.signedTx || - '0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222' - ); - } - - public async loadDeployments( - chainIdExpected = true - ): Promise<{ [name: string]: Deployment }> { - let chainId: string | undefined; - if (chainIdExpected) { - chainId = await this.getChainId(); - } - - let migrations = {}; - try { - log('loading migrations'); - migrations = JSON.parse( - fs - .readFileSync( - path.join( - this.deploymentsPath, - this.deploymentFolder(), - '.migrations.json' - ) - ) - .toString() - ); - } catch (e) {} - this.db.migrations = migrations; - // console.log({ migrations: this.db.migrations }); - - const networkName = this.getDeploymentNetworkName(); - - addDeployments( - this.db, - this.deploymentsPath, - this.deploymentFolder(), - networkName === this.network.name ? chainId : undefined // fork mode, we do not care about chainId ? - ); - - const extraDeploymentPaths = - this.env.config.external && - this.env.config.external.deployments && - this.env.config.external.deployments[networkName]; - if (extraDeploymentPaths) { - for (const deploymentFolderPath of extraDeploymentPaths) { - addDeployments(this.db, deploymentFolderPath, '', undefined, chainId); - } - } - - this.db.deploymentsLoaded = true; - return this.db.deployments; - } - - public async deletePreviousDeployments(folderPath?: string): Promise { - folderPath = folderPath || this.deploymentFolder(); - deleteDeployments(this.deploymentsPath, folderPath); - } - - public getSolcInputPath(): string { - return path.join( - this.deploymentsPath, - this.deploymentFolder(), - 'solcInputs' - ); - } - - public async deleteDotFile(name: string): Promise { - const toSave = - this.db.writeDeploymentsToFiles && this.network.saveDeployments; - - if (toSave) { - // do not delete if not save mode - const deployFolderpath = path.join( - this.deploymentsPath, - this.deploymentFolder() - ); - const filepath = path.join(deployFolderpath, name); - - try { - fs.unlinkSync(filepath); - } catch (e) {} - } - } - - public async readDotFile(name: string): Promise { - if (!name.startsWith('.')) { - throw new Error( - `file to save need to start with a dot to ensure it is not considered a deployment` - ); - } - - const deployFolderpath = path.join( - this.deploymentsPath, - this.deploymentFolder() - ); - - const filepath = path.join(deployFolderpath, name); - return fs.readFileSync(filepath).toString(); - } - - public async saveDotFile(name: string, content: string): Promise { - if (!name.startsWith('.')) { - throw new Error( - `file to save need to start with a dot to ensure it is not considered a deployment` - ); - } - - const toSave = - this.db.writeDeploymentsToFiles && this.network.saveDeployments; - - if (toSave) { - const chainId = await this.getChainId(); - const deployFolderpath = path.join( - this.deploymentsPath, - this.deploymentFolder() - ); - - const filepath = path.join(deployFolderpath, name); - fs.ensureDirSync(deployFolderpath); - const chainIdFilepath = path.join(deployFolderpath, '.chainId'); - if (!fs.existsSync(chainIdFilepath)) { - fs.writeFileSync(chainIdFilepath, chainId); - } - const folderPath = path.dirname(filepath); - fs.ensureDirSync(folderPath); - fs.writeFileSync(filepath, content); - } - } - - public async deleteDeployment(name: string): Promise { - delete this.db.deployments[name]; - - const toSave = - this.db.writeDeploymentsToFiles && this.network.saveDeployments; - - if (toSave) { - // do not delete if not save mode - const filepath = path.join( - this.deploymentsPath, - this.deploymentFolder(), - name + '.json' - ); - - try { - fs.unlinkSync(filepath); - } catch (e) {} - } - } - - public async saveDeployment( - name: string, - deployment: DeploymentSubmission - ): Promise { - if (name.includes('/') || name.includes(':')) { - throw new Error( - `deployment name must not be a path or Fully Qualified Name - for such purposes consider using the "contract" field of deployment options` - ); - } - - if ( - typeof deployment.address === undefined && - !deployment.receipt?.contractAddress - ) { - throw new Error( - 'deployment need a receipt with contractAddress or an address' - ); - } - if (typeof deployment.abi === undefined) { - throw new Error('deployment need an ABI'); - } - if (name.includes('/') || name.includes(':')) { - throw new Error( - `deployment name must not be a path or Fully Qualified Name - for such purposes consider using the "contract" field of deployment options` - ); - } - - const chainId = await this.getChainId(); - - const toSave = - this.db.writeDeploymentsToFiles && this.network.saveDeployments; - - const filepath = path.join( - this.deploymentsPath, - this.deploymentFolder(), - name + '.json' - ); - - // handle ethers receipt : - const receipt = deployment.receipt; - const actualReceipt = receipt - ? { - to: receipt.to, - from: receipt.from, - contractAddress: receipt.contractAddress, - transactionIndex: receipt.transactionIndex, - gasUsed: - receipt.gasUsed && (receipt.gasUsed as BigNumber)._isBigNumber - ? receipt.gasUsed.toString() - : receipt.gasUsed, - logsBloom: receipt.logsBloom, - blockHash: receipt.blockHash, - transactionHash: receipt.transactionHash, - logs: receipt.logs, - events: receipt.events, - blockNumber: receipt.blockNumber, - cumulativeGasUsed: - receipt.cumulativeGasUsed && - (receipt.cumulativeGasUsed as BigNumber)._isBigNumber - ? receipt.cumulativeGasUsed.toString() - : receipt.cumulativeGasUsed, - status: receipt.status, - byzantium: receipt.byzantium, - } - : undefined; - - // from : https://stackoverflow.com/a/14810722/1663971 - function objectMap(object: any, mapFn: (obj: any) => any) { - return Object.keys(object).reduce(function (result: any, key) { - result[key] = mapFn(object[key]); - return result; - }, {}); - } - - // TODO can cause infinite loop - function transform(v: any): any { - if (v._isBigNumber) { - return v.toString(); - } - if (Array.isArray(v)) { - return v.map(transform); - } - if (typeof v === 'object') { - return objectMap(v, transform); - } - return v; - } - - const actualArgs = deployment.args?.map(transform); - - let numDeployments = 1; - const oldDeployment = this.db.deployments[name] - ? { ...this.db.deployments[name] } - : undefined; - if (oldDeployment) { - numDeployments = (oldDeployment.numDeployments || 1) + 1; - if (!deployment.history) { - delete oldDeployment.history; - } - } - - const obj = JSON.parse( - JSON.stringify( - { - address: deployment.address || actualReceipt?.contractAddress, - addressHex: deployment.addressHex, - abi: deployment.abi, - transactionHash: - deployment.transactionHash || actualReceipt?.transactionHash, - receipt: actualReceipt, - args: actualArgs, - numDeployments, - linkedData: deployment.linkedData, - solcInputHash: deployment.solcInputHash, - metadata: deployment.metadata, - bytecode: deployment.bytecode, - deployedBytecode: deployment.deployedBytecode, - libraries: deployment.libraries, - facets: deployment.facets, - execute: deployment.execute, - history: deployment.history, - implementation: deployment.implementation, - devdoc: deployment.devdoc, - userdoc: deployment.userdoc, - storageLayout: deployment.storageLayout, - methodIdentifiers: deployment.methodIdentifiers, - gasEstimates: deployment.gasEstimates, // TODO double check : use evm field ? - bandwith: deployment.bandwith, - }, - bnReplacer - ) - ); - if (deployment.factoryDeps?.length) { - obj.factoryDeps = deployment.factoryDeps; - } - this.db.deployments[name] = obj; - if (obj.address === undefined && obj.transactionHash !== undefined) { - let receiptFetched; - try { - receiptFetched = await waitForTx( - this.network.provider, - obj.transactionHash, - true - ); - // TODO add receipt ? - obj.address = receiptFetched.contractAddress; - if (!obj.address) { - throw new Error('no contractAddress in receipt'); - } - } catch (e) { - console.error(e); - if (toSave) { - console.log('deleting ' + filepath); - fs.unlinkSync(filepath); - } - delete this.db.deployments[name]; - return false; // TODO throw error ? - } - } - - this.db.deployments[name] = obj; - // console.log({chainId, typeOfChainId: typeof chainId}); - if (toSave) { - // console.log("writing " + filepath); // TODO remove - try { - fs.mkdirSync(this.deploymentsPath); - } catch (e) {} - const deployFolderpath = path.join( - this.deploymentsPath, - this.deploymentFolder() - ); - try { - fs.mkdirSync(deployFolderpath); - } catch (e) {} - const chainIdFilepath = path.join(deployFolderpath, '.chainId'); - if (!fs.existsSync(chainIdFilepath)) { - fs.writeFileSync(chainIdFilepath, chainId); - } - - fs.writeFileSync(filepath, JSON.stringify(obj, bnReplacer, ' ')); - - if (deployment.solcInputHash && deployment.solcInput) { - const solcInputsFolderpath = path.join( - this.deploymentsPath, - this.deploymentFolder(), - 'solcInputs' - ); - const solcInputFilepath = path.join( - solcInputsFolderpath, - deployment.solcInputHash + '.json' - ); - if (!fs.existsSync(solcInputFilepath)) { - try { - fs.mkdirSync(solcInputsFolderpath); - } catch (e) {} - fs.writeFileSync(solcInputFilepath, deployment.solcInput); - } - } - } - - // this.spreadEvents(); - - return true; - } - - private companionManagers: { [name: string]: DeploymentsManager } = {}; - public addCompanionManager( - name: string, - networkDeploymentsManager: DeploymentsManager - ): void { - this.companionManagers[name] = networkDeploymentsManager; - } - - public async runDeploy( - tags?: string | string[], - options: { - deletePreviousDeployments: boolean; - log: boolean; - resetMemory: boolean; - writeDeploymentsToFiles: boolean; - savePendingTx: boolean; - export?: string; - exportAll?: string; - gasPrice?: string; - maxFeePerGas?: string; - maxPriorityFeePerGas?: string; - tagsRequireAll?: boolean; - } = { - log: false, - resetMemory: true, - deletePreviousDeployments: false, - writeDeploymentsToFiles: true, - savePendingTx: false, - } - ): Promise<{ [name: string]: Deployment }> { - log('runDeploy'); - this.setupNetwork(); - if (options.deletePreviousDeployments) { - log('deleting previous deployments'); - this.db.deployments = {}; - this.db.migrations = {}; - await this.deletePreviousDeployments(); - for (const companionNetworkName of Object.keys(this.companionManagers)) { - const companionManager = this.companionManagers[companionNetworkName]; - companionManager.deletePreviousDeployments(); - } - } - - await this.loadDeployments(); - this.db.gasUsed = BigNumber.from(0); - this.db.bandwith = BigNumber.from(0); - this.db.writeDeploymentsToFiles = options.writeDeploymentsToFiles; - this.db.savePendingTx = options.savePendingTx; - this.db.logEnabled = options.log; - this.db.gasPrice = options.gasPrice; - this.db.maxFeePerGas = options.maxFeePerGas; - this.db.maxPriorityFeePerGas = options.maxPriorityFeePerGas; - if (options.resetMemory) { - log('reseting memory'); - this.db.deployments = {}; - this.db.migrations = {}; - } - if (!options.deletePreviousDeployments && options.savePendingTx) { - await this.dealWithPendingTransactions(); // TODO deal with reset ? - } - - for (const companionNetworkName of Object.keys(this.companionManagers)) { - const companionManager = this.companionManagers[companionNetworkName]; - await companionManager.loadDeployments(); - companionManager.db.writeDeploymentsToFiles = - options.writeDeploymentsToFiles; - companionManager.db.savePendingTx = options.savePendingTx; - companionManager.db.logEnabled = options.log; - // companionManager.db.gasPrice = options.gasPrice; - if (options.resetMemory) { - log('reseting memory'); - companionManager.db.deployments = {}; - companionManager.db.migrations = {}; - } - if (!options.deletePreviousDeployments && options.savePendingTx) { - await companionManager.dealWithPendingTransactions(); // TODO deal with reset ? - } - } - - if (tags !== undefined && typeof tags === 'string') { - tags = [tags]; - } - - if (this.env.config.external?.contracts) { - for (const externalContracts of this.env.config.external.contracts) { - if (externalContracts.deploy) { - // make sure we're not deploying on Tron contracts that are not meant to be deployed there - if ( - this.isTronNetworkWithTronSolc && // are we using tron-solc compiler and is the network a Tron network? - externalContracts.artifacts.some((str) => !str.endsWith('-tron')) // are some of the artifacts folder not ending in -tron? - ) { - continue; - } - this.db.onlyArtifacts = externalContracts.artifacts; - try { - await this.executeDeployScripts( - [externalContracts.deploy], - tags, - options.tagsRequireAll - ); - } finally { - this.db.onlyArtifacts = undefined; - } - } - } - } - - const deployPaths = getDeployPaths(this.network); - - await this.executeDeployScripts(deployPaths, tags, options.tagsRequireAll); - - await this.export(options); - - return this.db.deployments; - } - - public async executeDeployScripts( - deployScriptsPaths: string[], - tags: string[] = [], - tagsRequireAll = false - ): Promise { - const wasWrittingToFiles = this.db.writeDeploymentsToFiles; - // TODO loop over companion networks ? - // This is currently posing problem for network like optimism which require a different set of artifact and hardhat currently only expose one set at a time - - let filepaths; - try { - filepaths = traverseMultipleDirectory(deployScriptsPaths); - } catch (e) { - return; - } - filepaths = filepaths.sort((a: string, b: string) => { - if (a < b) { - return -1; - } - if (a > b) { - return 1; - } - return 0; - }); - log('deploy script folder parsed'); - - const funcByFilePath: { [filename: string]: DeployFunction } = {}; - const scriptPathBags: { [tag: string]: string[] } = {}; - const scriptFilePaths: string[] = []; - for (const filepath of filepaths) { - const scriptFilePath = path.resolve(filepath); - let deployFunc: DeployFunction; - // console.log("fetching " + scriptFilePath); - try { - delete require.cache[scriptFilePath]; // ensure we reload it every time, so changes are taken in consideration - deployFunc = require(scriptFilePath); - if ((deployFunc as any).default) { - deployFunc = (deployFunc as any).default as DeployFunction; - } - funcByFilePath[scriptFilePath] = deployFunc; - } catch (e) { - // console.error("require failed", e); - throw new Error( - 'ERROR processing skip func of ' + - filepath + - ':\n' + - ((e as any).stack || e) - ); - } - // console.log("get tags if any for " + scriptFilePath); - let scriptTags = deployFunc.tags || []; - if (typeof scriptTags === 'string') { - scriptTags = [scriptTags]; - } - for (const tag of scriptTags) { - if (tag.indexOf(',') >= 0) { - throw new Error('Tag cannot contain commas'); - } - const bag = scriptPathBags[tag] || []; - scriptPathBags[tag] = bag; - bag.push(scriptFilePath); - } - // console.log("tags found " + scriptFilePath, scriptTags); - if ( - (tagsRequireAll && tags.every((tag) => scriptTags.includes(tag))) || - (!tagsRequireAll && - (tags.length == 0 || tags.some((tag) => scriptTags.includes(tag)))) - ) { - scriptFilePaths.push(scriptFilePath); - } - } - log('tag collected'); - - // console.log({ scriptFilePaths }); - const scriptsRegisteredToRun: { [filename: string]: boolean } = {}; - const scriptsToRun: Array<{ - func: DeployFunction; - filePath: string; - }> = []; - const scriptsToRunAtTheEnd: Array<{ - func: DeployFunction; - filePath: string; - }> = []; - function recurseDependencies(scriptFilePath: string) { - if (scriptsRegisteredToRun[scriptFilePath]) { - return; - } - const deployFunc = funcByFilePath[scriptFilePath]; - if (deployFunc.dependencies) { - for (const dependency of deployFunc.dependencies) { - const scriptFilePathsToAdd = scriptPathBags[dependency]; - if (scriptFilePathsToAdd) { - for (const scriptFilenameToAdd of scriptFilePathsToAdd) { - recurseDependencies(scriptFilenameToAdd); - } - } - } - } - if (!scriptsRegisteredToRun[scriptFilePath]) { - if (deployFunc.runAtTheEnd) { - scriptsToRunAtTheEnd.push({ - filePath: scriptFilePath, - func: deployFunc, - }); - } else { - scriptsToRun.push({ - filePath: scriptFilePath, - func: deployFunc, - }); - } - scriptsRegisteredToRun[scriptFilePath] = true; - } - } - for (const scriptFilePath of scriptFilePaths) { - recurseDependencies(scriptFilePath); - } - log('dependencies collected'); - - try { - for (const deployScript of scriptsToRun.concat(scriptsToRunAtTheEnd)) { - const filename = path.basename(deployScript.filePath); - if (deployScript.func.id && this.db.migrations[deployScript.func.id]) { - log( - `skipping ${filename} as migrations already executed and complete` - ); - continue; - } - let skip = false; - if (deployScript.func.skip) { - log(`should we skip ${deployScript.filePath} ?`); - try { - skip = await deployScript.func.skip(this.env); - } catch (e) { - // console.error("skip failed", e); - throw new Error( - 'ERROR processing skip func of ' + - deployScript.filePath + - ':\n' + - ((e as any).stack || e) - ); - } - log(`checking skip for ${deployScript.filePath} complete`); - } - if (!skip) { - log(`executing ${deployScript.filePath}`); - let result; - try { - result = await deployScript.func(this.env); - } catch (e) { - // console.error("execution failed", e); - throw new Error( - 'ERROR processing ' + - deployScript.filePath + - ':\n' + - ((e as any).stack || e) - ); - } - log(`executing ${deployScript.filePath} complete`); - if (result && typeof result === 'boolean') { - if (!deployScript.func.id) { - throw new Error( - `${deployScript.filePath} return true to not be executed again, but does not provide an id. the script function needs to have the field "id" to be set` - ); - } - this.db.migrations[deployScript.func.id] = Math.floor( - Date.now() / 1000 - ); - - const deploymentFolderPath = this.deploymentFolder(); - - // TODO refactor to extract this whole path and folder existence stuff - const toSave = - this.db.writeDeploymentsToFiles && this.network.saveDeployments; - if (toSave) { - try { - fs.mkdirSync(this.deploymentsPath); - } catch (e) {} - try { - fs.mkdirSync( - path.join(this.deploymentsPath, deploymentFolderPath) - ); - } catch (e) {} - fs.writeFileSync( - path.join( - this.deploymentsPath, - deploymentFolderPath, - '.migrations.json' - ), - JSON.stringify(this.db.migrations, bnReplacer, ' ') - ); - } - } - } - } - } catch (e) { - this.db.writeDeploymentsToFiles = wasWrittingToFiles; - throw e; - } - this.db.writeDeploymentsToFiles = wasWrittingToFiles; - log('deploy scripts complete'); - } - - public async export(options: { - exportAll?: string; - export?: string; - }): Promise { - let chainId: string | undefined; - try { - chainId = fs - .readFileSync( - path.join(this.deploymentsPath, this.deploymentFolder(), '.chainId') - ) - .toString() - .trim(); - } catch (e) {} - if (!chainId) { - chainId = await this.getChainId(); - } - - if (options.exportAll !== undefined) { - log('load all deployments for export-all'); - const all = loadAllDeployments( - this.env, - this.deploymentsPath, - true, - this.env.config.external && this.env.config.external.deployments - ); - const currentNetworkDeployments: { - [contractName: string]: { - address: string; - abi: any[]; - linkedData?: any; - }; - } = {}; - const currentDeployments = this.db.deployments; - for (const contractName of Object.keys(currentDeployments)) { - const deployment = currentDeployments[contractName]; - currentNetworkDeployments[contractName] = { - address: deployment.address, - abi: deployment.abi, - linkedData: deployment.linkedData, - }; - } - const currentNetwork = this.getDeploymentNetworkName(); - if (all[chainId] === undefined) { - all[chainId] = []; - } else { - all[chainId] = all[chainId].filter((v) => v.name !== currentNetwork); - } - all[chainId].push({ - name: currentNetwork, - chainId, - contracts: currentNetworkDeployments, - }); - this._writeExports(options.exportAll, all); - - log('export-all complete'); - } - - if (options.export !== undefined) { - log('single export...'); - const currentNetworkDeployments: { - [contractName: string]: { - address: string; - abi: any[]; - linkedData?: any; - }; - } = {}; - if (chainId !== undefined) { - const currentDeployments = this.db.deployments; - for (const contractName of Object.keys(currentDeployments)) { - const deployment = currentDeployments[contractName]; - currentNetworkDeployments[contractName] = { - address: deployment.address, - abi: deployment.abi, - linkedData: deployment.linkedData, - }; - } - } else { - throw new Error('chainId is undefined'); - } - const singleExport: Export = { - name: this.getDeploymentNetworkName(), - chainId, - contracts: currentNetworkDeployments, - }; - - this._writeExports(options.export, singleExport); - log('single export complete'); - } - } - - private _writeExports(dests: string, outputObject: any) { - const output = JSON.stringify(outputObject, bnReplacer, ' '); // TODO remove bytecode ? - const splitted = dests.split(','); - for (const split of splitted) { - if (!split) { - continue; - } - if (split === '-') { - process.stdout.write(output); - } else { - fs.ensureDirSync(path.dirname(split)); - if (split.endsWith('.ts')) { - fs.writeFileSync(split, `export default ${output} as const;`); - } else { - fs.writeFileSync(split, output); - } - } - } - } - - /** - * Retrieves import paths for Tron-specific contracts. - * - * This method enforces a safety check to ensure that only contracts compiled for Tron are deployed. - * It requires that import paths for external folders must end with '-tron'. The method checks both - * the project's own import paths and any external contracts specified in the configuration. - * - * @returns {string[]} An array of import paths that conform to the Tron-specific naming convention. - */ - private getTronImportPaths() { - const importPaths = []; - if (this.env.config.paths.imports.endsWith('-tron')) { - importPaths.push(this.env.config.paths.imports); - } - if (this.env.config.external && this.env.config.external.contracts) { - for (const externalContracts of this.env.config.external.contracts) { - for (const artifact of externalContracts.artifacts) { - if (artifact.endsWith('-tron')) { - importPaths.push(artifact); - } - } - } - } - return importPaths; - } - - private getImportPaths() { - // this check is true when the hardhat-tron-solc plugin is used and the network is Tron - if (this.isTronNetworkWithTronSolc) { - return this.getTronImportPaths(); - } - const importPaths = [this.env.config.paths.imports]; - if (this.env.config.external && this.env.config.external.contracts) { - for (const externalContracts of this.env.config.external.contracts) { - importPaths.push(...externalContracts.artifacts); - } - } - return importPaths; - } - - private async setup(isRunningGlobalFixture: boolean) { - this.setupNetwork(); - if (!this.db.deploymentsLoaded && !isRunningGlobalFixture) { - if (process.env.HARDHAT_DEPLOY_FIXTURE) { - if (process.env.HARDHAT_COMPILE) { - // console.log("compiling..."); - await this.env.run('compile'); - } - this.db.deploymentsLoaded = true; - // console.log("running global fixture...."); - await this.partialExtension.fixture(undefined, { - keepExistingDeployments: true, // by default reuse the existing deployments (useful for fork testing) - }); - } else { - if (process.env.HARDHAT_COMPILE) { - // console.log("compiling..."); - await this.env.run('compile'); - } - await this.loadDeployments(); - } - } - } - - private async saveSnapshot(key: string, data?: any) { - const latestBlock = await this.network.provider.send( - 'eth_getBlockByNumber', - ['latest', false] - ); - try { - const snapshot = await this.network.provider.send('evm_snapshot', []); - this.db.pastFixtures[key] = { - index: ++this.db.snapshotCounter, - snapshot, - data, - blockHash: latestBlock.hash, - deployments: { ...this.db.deployments }, - }; - } catch (err) { - log(`failed to create snapshot`); - } - } - - private async revertSnapshot(saved: { - index: number; - snapshot: any; - blockHash: string; - deployments: any; - }): Promise { - const snapshotToRevertIndex = saved.index; - for (const fixtureKey of Object.keys(this.db.pastFixtures)) { - const snapshotIndex = this.db.pastFixtures[fixtureKey].index; - if (snapshotIndex > snapshotToRevertIndex) { - delete this.db.pastFixtures[fixtureKey]; - } - } - let success; - try { - success = await this.network.provider.send('evm_revert', [ - saved.snapshot, - ]); - } catch { - log(`failed to revert to snapshot`); - success = false; - } - if (success) { - const blockRetrieved = await this.network.provider.send( - 'eth_getBlockByHash', - [saved.blockHash, false] - ); - if (blockRetrieved) { - saved.snapshot = await this.network.provider.send('evm_snapshot', []); // it is necessary to re-snapshot it - this.db.deployments = { ...saved.deployments }; - } else { - // TODO or should we throw ? - return false; - } - } - return success; - } - - disableAutomaticImpersonation(): void { - this.impersonateUnknownAccounts = false; - } - - private getNetworkName(): string { - return getNetworkName(this.network); - } - - private getDeploymentNetworkName(): string { - if (this.db.runAsNode) { - return 'localhost'; - } - return getNetworkName(this.network); - } - - private deploymentFolder(): string { - return this.getDeploymentNetworkName(); - } - - private async impersonateAccounts(unknownAccounts: string[]) { - if ( - !this.impersonateUnknownAccounts || - process.env.HARDHAT_DEPLOY_NO_IMPERSONATION - ) { - return; - } - - if (this.network.autoImpersonate) { - for (const address of unknownAccounts) { - if (this.network.name === 'hardhat') { - await this.network.provider.request({ - method: 'hardhat_impersonateAccount', - params: [address], - }); - } - this.impersonatedAccounts.push(address); - } - } - } - - public async setupAccounts(): Promise<{ - namedAccounts: { [name: string]: string }; - unnamedAccounts: string[]; - }> { - if (!this.db.accountsLoaded) { - const chainId = await this.getChainId(); - const accounts = await this.network.provider.send('eth_accounts'); - const { - namedAccounts, - unnamedAccounts, - unknownAccounts, - addressesToProtocol, - } = processNamedAccounts( - this.network, - this.env.config.namedAccounts, - accounts, - chainId - ); // TODO pass in network name - - await this.impersonateAccounts(unknownAccounts); - - this.db.namedAccounts = namedAccounts; - this.db.unnamedAccounts = unnamedAccounts; - this.db.accountsLoaded = true; - this.addressesToProtocol = addressesToProtocol; - } - - return { - namedAccounts: this.db.namedAccounts, - unnamedAccounts: this.db.unnamedAccounts, - }; - } -} diff --git a/src/adapters/foundry.ts b/src/adapters/foundry.ts new file mode 100644 index 0000000..ad840bd --- /dev/null +++ b/src/adapters/foundry.ts @@ -0,0 +1,39 @@ +import { createHash } from 'node:crypto'; +import { readFileSync, realpathSync } from 'node:fs'; +import { resolve, sep } from 'node:path'; +import { toolchainError } from '../errors.js'; +import type { Target } from '../project/binding.js'; +import { spawnNative } from '../process/spawn.js'; +import { releaseFor } from '../toolchain/releases.js'; + +type FoundryTool = 'forge' | 'cast' | 'anvil' | 'chisel'; +interface BinaryLock { path: string; sha256: string } +export interface ToolchainLock { + version: number; + target: Target; + source: string; + release: string; + revision: string; + platform: string; + binaries: Record; +} + +export async function runFoundry(root: string, target: Target, tool: FoundryTool, args: readonly string[]): Promise { + const lock = loadToolchain(root, target); const binary = lock.binaries[tool]; + if (!binary) return toolchainError(`locked toolchain does not provide ${tool}`); + const projectRoot = realpathSync(root); const executable = realpathSync(resolve(projectRoot, binary.path)); + if (executable !== projectRoot && !executable.startsWith(`${projectRoot}${sep}`)) return toolchainError(`${tool} path escapes the project root`); + const digest = sha256(executable); if (digest !== binary.sha256) return toolchainError(`${tool} digest mismatch: expected ${binary.sha256}, got ${digest}`); + return await spawnNative(executable, args, root); +} + +export function loadToolchain(root: string, target: Target): ToolchainLock { + const path = resolve(root, '.sunhat/toolchain.json'); let lock: ToolchainLock; + try { lock = JSON.parse(readFileSync(path, 'utf8')) as ToolchainLock; } + catch { return toolchainError('Foundry toolchain is not installed; run `sunhat toolchain install`'); } + const release = releaseFor(target); + if (lock.version !== 1 || lock.target !== target || lock.source !== release.source || lock.release !== release.release || lock.revision !== release.revision) return toolchainError(`toolchain lock does not match ${release.source}@${release.revision}; reinstall it`); + return lock; +} + +export function sha256(path: string): string { return createHash('sha256').update(readFileSync(path)).digest('hex'); } diff --git a/src/adapters/hardhat.ts b/src/adapters/hardhat.ts new file mode 100644 index 0000000..71c067b --- /dev/null +++ b/src/adapters/hardhat.ts @@ -0,0 +1,22 @@ +import { createRequire } from 'node:module'; +import { dirname, isAbsolute, resolve, sep } from 'node:path'; +import { readFileSync, realpathSync } from 'node:fs'; +import { toolchainError } from '../errors.js'; +import { spawnNative } from '../process/spawn.js'; +interface PackageJson { version?: string; bin?: string | Record } +export async function runHardhat(root: string, args: readonly string[]): Promise { + const require = createRequire(resolve(root, 'package.json')); let manifestPath: string; + try { manifestPath = require.resolve('hardhat/package.json'); } catch { return toolchainError('local Hardhat dependency is missing; install the project lockfile dependencies'); } + const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as PackageJson; + if (!manifest.version?.startsWith('2.')) return toolchainError(`Hardhat 2 is required; resolved ${manifest.version ?? 'unknown'} at ${manifestPath}`); + const project = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8')) as { dependencies?: Record; devDependencies?: Record }; + const expected = project.devDependencies?.hardhat ?? project.dependencies?.hardhat; + if (!expected) return toolchainError('Hardhat must be declared in the project package.json'); + if (expected !== manifest.version) return toolchainError(`Hardhat version mismatch: expected ${expected}, resolved ${manifest.version} at ${manifestPath}`); + const relative = typeof manifest.bin === 'string' ? manifest.bin : manifest.bin?.hardhat; + if (!relative) return toolchainError(`Hardhat package has no hardhat bin entry: ${manifestPath}`); + if (isAbsolute(relative)) return toolchainError('Hardhat bin must be package-relative'); + const packageRoot = realpathSync(dirname(manifestPath)); const entry = realpathSync(resolve(packageRoot, relative)); + if (entry !== packageRoot && !entry.startsWith(`${packageRoot}${sep}`)) return toolchainError('Hardhat bin escapes package root'); + return await spawnNative(process.execPath, [entry, ...args], root); +} diff --git a/src/bin/sunhat.ts b/src/bin/sunhat.ts new file mode 100644 index 0000000..c972d9d --- /dev/null +++ b/src/bin/sunhat.ts @@ -0,0 +1,9 @@ +#!/usr/bin/env node +import { parse } from '../cli/parser.js'; +import { route } from '../cli/router.js'; +import { CliError } from '../errors.js'; +try { process.exitCode = await route(parse(process.argv.slice(2))); } +catch (error) { + if (error instanceof CliError) { process.stderr.write(`sunhat: ${error.message}\n`); process.exitCode = error.exitCode; } + else { process.stderr.write(`sunhat: ${error instanceof Error ? error.message : String(error)}\n`); process.exitCode = 6; } +} diff --git a/src/cli.ts b/src/cli.ts deleted file mode 100644 index c3318d5..0000000 --- a/src/cli.ts +++ /dev/null @@ -1,449 +0,0 @@ -#!/usr/bin/env node -import fs from 'fs-extra'; -import path from 'path'; -import { spawn, execSync } from 'child_process'; -import colors from 'colors'; - -const SCAFFOLD = { - packageJson: (pluginVersion: string, projectName: string) => ({ - name: projectName, - version: '1.0.0', - devDependencies: { - dotenv: '^16.4.7', - hardhat: '^2.23.0', - '@nomicfoundation/hardhat-foundry': '^1.1.3', - '@nomicfoundation/hardhat-toolbox': '^5.0.0', - '@nomiclabs/hardhat-vyper': '^3.0.8', - '@sun-protocol/sunhat': `^${pluginVersion}`, - }, - scripts: { - start: 'hardhat node', - compile: 'hardhat compile', - clean: 'hardhat clean', - test: 'hardhat test', - 'test-foundry': 'forge test -vvv', - coverage: 'hardhat coverage', - audit: 'hardhat audit', - 'vscode-audit': 'hardhat audit --format json', - deploy: 'hardhat deploy --network tron', - }, - }), - gitignore: `dist -node_modules -build -.env -cache -package-lock.json -deployments/ -artifacts/ -typechain-types/ -out/ -cache_forge/ -lib/ -pnpm-lock.yaml -.pnpm-store -*.swp -*.swo -audit-report.json -coverage.json -coverage/ -foundry.lock -`, - env: `# Network Config -TRON_RPC_URL=https://api.trongrid.io/jsonrpc -PRIVATE_KEY= - -# API Keys -ETHERSCAN_API_KEY= -TRONSCAN_API_KEY= - -# LLM Config -MODEL_NAME= - -OPENAI_API_KEY= -OPENAI_ENDPOINT= -OPENAI_DEPLOYMENT= -OPENAI_API_VERSION= - -GEMINI_API_KEY= - -QWEN_API_KEY= -QWEN_BASE_URL= - -DEEPSEEK_API_KEY= -DEEPSEEK_BASE_URL= -`, - tsconfig: `{ - "compilerOptions": { - "target": "es2020", - "module": "commonjs", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "resolveJsonModule": true - }, - "include": ["./hardhat.config.ts", "./scripts", "./test", "./deploy"] -} -`, - contract: `// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -contract TronGreeter { - string public greeting; - - constructor(string memory _greeting) { - greeting = _greeting; - } - - function setGreeting(string memory _greeting) public { - greeting = _greeting; - } - - function greet() public view returns (string memory) { - return greeting; - } -} -`, - foundryTest: `// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Test, console} from "forge-std/Test.sol"; -import {TronGreeter} from "../contracts/TronGreeter.sol"; - -contract TronGreeterTest is Test { - TronGreeter public greeter; - - function setUp() public { - greeter = new TronGreeter("Hello Tron"); - } - - function test_InitialGreeting() public { - string memory actualGreeting = greeter.greet(); - string memory expectedGreeting = "Hello Tron"; - - assertEq(actualGreeting, expectedGreeting, "Initial greeting should match"); - } - - function test_SetGreeting() public { - string memory newGreeting = "Hola Sun"; - greeter.setGreeting(newGreeting); - - string memory actualGreeting = greeter.greet(); - - assertEq(actualGreeting, newGreeting, "Greeting should change after calling setGreeting"); - } -} -`, - mochaTest: `import { loadFixture } from "@nomicfoundation/hardhat-toolbox/network-helpers"; -import { expect } from "chai"; -import { ethers } from "hardhat"; - -describe("TronGreeter", function () { - async function deployGreeterFixture() { - const initialGreeting = "Hello Tron"; - const TronGreeter = await ethers.getContractFactory("TronGreeter"); - const greeter = await TronGreeter.deploy(initialGreeting); - - return { greeter, initialGreeting }; - } - - it("Should return the new greeting once it's changed", async function () { - const { greeter, initialGreeting } = await loadFixture(deployGreeterFixture); - - expect(await greeter.greet()).to.equal(initialGreeting); - - const newGreeting = "Hola Sun"; - const tx = await greeter.setGreeting(newGreeting); - await tx.wait(); - - expect(await greeter.greet()).to.equal(newGreeting); - }); - - it("Should set the right greeting on deployment", async function () { - const { greeter, initialGreeting } = await loadFixture(deployGreeterFixture); - expect(await greeter.greet()).to.equal(initialGreeting); - }); -}); -`, - deployScript: `import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { DeployFunction } from 'hardhat-deploy/types'; - -const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - const { deployments, getNamedAccounts } = hre; - const { deploy } = deployments; - const { deployer } = await getNamedAccounts(); - - await deploy('TronGreeter', { - from: deployer, - args: ['Hello Tron!'], - log: true, - }); -}; -export default func; -func.tags = ['TronGreeter']; -`, - hardhatConfig: `import { HardhatUserConfig } from '@sun-protocol/sunhat'; -import '@nomicfoundation/hardhat-toolbox'; -import '@nomiclabs/hardhat-vyper'; -import '@sun-protocol/sunhat'; -import '@nomicfoundation/hardhat-foundry'; - -import * as dotenv from 'dotenv'; -dotenv.config(); - -const settings = { - optimizer: { - enabled: true, // enabled for optimizer - runs: 999999, // runs time for optimizer run - }, -}; - -const config: HardhatUserConfig = { - solidity: { - compilers: [ - { version: '0.8.25', settings }, // current solc version 1 - ], - }, - vyper: { - compilers: [ - { version: '0.2.8' }, // current vyper compilers version 1 - ], - }, - // settings for different networks - networks: { - tron: { - url: process.env.TRON_RPC_URL || 'https://nile.trongrid.io/jsonrpc', // tron rpc url - tron: true, // enable tron network - deploy: ['deploy/'], // folder for tron deploy scripts - accounts: process.env.PRIVATE_KEY ? [ process.env.PRIVATE_KEY ] : [], // account private key for deploy - }, - }, - tronSolc: { - enable: true, // enable tron solc compiler - }, - namedAccounts: { - deployer: { - default: 0, // here this will by default take the first account as deployer - }, - }, - llm: { - defaultProvider: 'openai', - // promptTemplate: - // 'As a world-class smart contract auditor, please perform a detailed security review of the following {language} code from the file "{contractName}". Focus especially on re-entrancy, integer overflows, and access control issues.', - providers: { - openai: { - apiKey: process.env.OPENAI_API_KEY || '', - model: process.env.MODEL_NAME || 'gpt-4o', - }, - // azure_openai: { - // apiKey: process.env.OPENAI_API_KEY || '', - // endpoint: process.env.OPENAI_ENDPOINT || '', - // deploymentName: process.env.OPENAI_DEPLOYMENT || '', - // apiVersion: process.env.OPENAI_API_VERSION || '', - // model: process.env.MODEL_NAME || 'gpt-4o', - // }, - // gemini: { - // apiKey: process.env.GEMINI_API_KEY || '', - // model: process.env.MODEL_NAME || 'gemini-2.5-pro', - // }, - // qwen: { - // apiKey: process.env.QWEN_API_KEY || '', - // model: process.env.MODEL_NAME || 'qwen-turbo', - // baseURL: process.env.QWEN_BASE_URL || '', - // }, - // deepseek: { - // apiKey: process.env.DEEPSEEK_API_KEY || '', - // model: process.env.MODEL_NAME || 'deepseek-coder', - // baseURL: process.env.DEEPSEEK_BASE_URL || '', - // }, - }, - }, -}; - -export default config; -`, -}; - -async function main() { - const args = process.argv.slice(2); - const command = args[0]; - - if (command === 'init') { - await handleInit(args); - return; - } - - await handleProxy(args); -} - -async function handleInit(args: string[]) { - const targetName = args[1] || '.'; - const targetDir = path.resolve(process.cwd(), targetName); - const isCurrentDir = targetName === '.'; - - console.log( - colors.cyan( - `\n☀️ Initializing SunHat Project in ${ - isCurrentDir ? 'current directory' : targetDir - }...\n` - ) - ); - - if (!isCurrentDir && (await fs.pathExists(targetDir))) { - const files = await fs.readdir(targetDir); - if (files.length > 0) { - console.error( - colors.red(`Error: Directory '${targetName}' is not empty.`) - ); - process.exit(1); - } - } - - await fs.ensureDir(targetDir); - - const myPackageJsonPath = path.resolve(__dirname, '../../package.json'); - const myPackageJson = await fs - .readJSON(myPackageJsonPath) - .catch(() => ({ version: 'latest' })); - - // 1. Create Directories - await fs.ensureDir(path.join(targetDir, 'contracts')); - await fs.ensureDir(path.join(targetDir, 'deploy')); - await fs.ensureDir(path.join(targetDir, 'scripts')); - await fs.ensureDir(path.join(targetDir, 'test')); - - // 2. Create Files - await fs.outputFile(path.join(targetDir, '.env'), SCAFFOLD.env); - await fs.outputFile(path.join(targetDir, '.gitignore'), SCAFFOLD.gitignore); - await fs.outputFile(path.join(targetDir, 'tsconfig.json'), SCAFFOLD.tsconfig); - await fs.outputFile( - path.join(targetDir, 'contracts/TronGreeter.sol'), - SCAFFOLD.contract - ); - await fs.outputFile( - path.join(targetDir, 'test/TronGreeter.t.sol'), - SCAFFOLD.foundryTest - ); - await fs.outputFile( - path.join(targetDir, 'test/TronGreeter.test.ts'), - SCAFFOLD.mochaTest - ); - await fs.outputFile( - path.join(targetDir, 'deploy/01_deploy_greeter.ts'), - SCAFFOLD.deployScript - ); - await fs.outputFile( - path.join(targetDir, 'hardhat.config.ts'), - SCAFFOLD.hardhatConfig - ); - - const pkgJsonData = SCAFFOLD.packageJson( - myPackageJson.version, - path.basename(targetDir) - ); - await fs.writeJSON(path.join(targetDir, 'package.json'), pkgJsonData, { - spaces: 2, - }); - - console.log('Installing dependencies...'); - - // install dependencies - const installChild = spawn('npm', ['install'], { - cwd: targetDir, - stdio: 'inherit', - shell: true, - }); - - installChild.on('close', (code) => { - if (code === 0) { - try { - console.log('Initializing git repository...'); - execSync('git init', { cwd: targetDir, stdio: 'ignore' }); - execSync('git add .', { cwd: targetDir, stdio: 'ignore' }); - execSync('git commit -m "Initial sunhat project"', { - cwd: targetDir, - stdio: 'ignore', - }); - console.log(colors.green('✅ Git repository initialized.')); - } catch (e) { - console.warn( - colors.yellow( - "⚠️ Failed to initialize git repository. You may need to run 'git init' manually." - ) - ); - } - try { - console.log('Setting up Foundry...'); - execSync('npx hardhat init-foundry', { - cwd: targetDir, - stdio: 'inherit', - }); - console.log(colors.green('✅ Foundry initialized.')); - } catch (e) { - console.warn( - colors.yellow( - "⚠️ Failed to initialize git repository. You may need to run 'npx hardhat init-foundry' manually." - ) - ); - } - console.log(colors.green(`\n✅ Project ready!`)); - if (!isCurrentDir) { - console.log(`\nYou may want to: ${colors.yellow('cd ${targetName}')}`); - } - } else { - console.error(colors.red('\n❌ Dependencies installation failed.')); - } - }); -} - -async function handleProxy(args: string[]) { - const localHardhatBin = path.join( - process.cwd(), - 'node_modules', - '.bin', - 'hardhat' - ); - - let executable = localHardhatBin; - - if ( - !fs.existsSync(localHardhatBin) && - !fs.existsSync(localHardhatBin + '.cmd') - ) { - console.error( - colors.yellow(`\n⚠️ Could not find local hardhat installation.`) - ); - console.error( - `Please run inside a project directory or run '${colors.cyan( - 'sunhat init' - )}' to create one.\n` - ); - process.exit(1); - } - - if (process.platform === 'win32') { - executable += '.cmd'; - } - - const child = spawn(executable, args, { - stdio: 'inherit', - env: process.env, - }); - - child.on('close', (code) => { - process.exit(code ?? 0); - }); - - process.on('SIGINT', () => { - child.kill('SIGINT'); - }); - process.on('SIGTERM', () => { - child.kill('SIGTERM'); - }); -} - -main().catch((err) => { - console.error(err); - process.exit(1); -}); diff --git a/src/cli/parser.ts b/src/cli/parser.ts new file mode 100644 index 0000000..8753faf --- /dev/null +++ b/src/cli/parser.ts @@ -0,0 +1,22 @@ +import { usage } from '../errors.js'; +import type { Target } from '../project/binding.js'; +export type Invocation = + | { kind: 'help' } + | { kind: 'version' } + | { kind: 'init'; args: string[] } + | { kind: 'run'; command: string; args: string[] }; +export function parse(argv: readonly string[]): Invocation { + if (argv.length === 0 || (argv.length === 1 && (argv[0] === '-h' || argv[0] === '--help'))) return { kind: 'help' }; + if (argv.length === 1 && (argv[0] === '-V' || argv[0] === '--version')) return { kind: 'version' }; + const command = argv[0]; + if (!command) return usage('missing command or task'); + if (command === 'init') return { kind: 'init', args: argv.slice(1) }; + if (command === 'hardhat' || command === 'foundry') { + return usage(`framework namespace is no longer supported; run \`sunhat ${argv[1] ?? ''}\` instead`); + } + return { kind: 'run', command, args: argv.slice(1) }; +} +export function parseTarget(value: string): Target { + if (value !== 'tron' && value !== 'evm') return usage(`invalid target ${value}; expected tron or evm`); + return value; +} diff --git a/src/cli/router.ts b/src/cli/router.ts new file mode 100644 index 0000000..adfc807 --- /dev/null +++ b/src/cli/router.ts @@ -0,0 +1,34 @@ +import { resolve } from 'node:path'; +import { runHardhat } from '../adapters/hardhat.js'; +import { runFoundry } from '../adapters/foundry.js'; +import { initProject } from '../commands/init.js'; +import { toolchain } from '../commands/toolchain.js'; +import { usage } from '../errors.js'; +import { readBinding } from '../project/binding.js'; +import { findProjectRoot } from '../project/root.js'; +import type { Invocation } from './parser.js'; +export const HELP = `Sunhat project-bound framework CLI + +Usage: + sunhat init [--framework ] [--target ] [--adopt] [path] + sunhat [args...] + +Init defaults: framework=foundry, target=tron +`; +export async function route(invocation: Invocation): Promise { + if (invocation.kind === 'help') { process.stdout.write(HELP); return 0; } + if (invocation.kind === 'version') { process.stdout.write('sunhat 2.0.0\n'); return 0; } + if (invocation.kind === 'init') return initProject(invocation.args); + const root = findProjectRoot(process.cwd()); const binding = readBinding(resolve(root, 'sunhat.toml')); + if (binding.framework === 'hardhat') return await runHardhat(root, [invocation.command, ...invocation.args]); + if (invocation.command === 'toolchain') return toolchain(root, binding.target, invocation.args); + const command = invocation.command; + if (command === 'anvil' || command === 'chisel') { + if (binding.target === 'tron') return usage(`${command} is unsupported for the TRON target`); + return await runFoundry(root, binding.target, command, invocation.args); + } + if (command === 'cast') { + return await runFoundry(root, binding.target, 'cast', invocation.args); + } + return await runFoundry(root, binding.target, 'forge', [command, ...invocation.args]); +} diff --git a/src/commands/init.ts b/src/commands/init.ts new file mode 100644 index 0000000..2b4c887 --- /dev/null +++ b/src/commands/init.ts @@ -0,0 +1,129 @@ +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import { basename, dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { CliError, usage } from '../errors.js'; +import type { Framework, Target } from '../project/binding.js'; +import { parseTarget } from '../cli/parser.js'; + +interface InitOptions { framework: Framework; target?: Target; path: string; adopt: boolean } +const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); +export function initProject(argv: readonly string[]): number { + const options = parseOptions(argv); + const { framework } = options; + const root = resolve(options.path); mkdirSync(root, { recursive: true }); + if (existsSync(resolve(root, 'sunhat.toml'))) return usage(`${root} is already bound by sunhat.toml`); + const target = options.target ?? 'tron'; + if (options.adopt) validateNativeProject(root, framework); + else scaffold(root, framework, target); + writeExclusive(resolve(root, 'sunhat.toml'), `[project]\nframework = "${framework}"\ntarget = "${target}"\n`); + process.stderr.write(`${options.adopt ? 'adopted' : 'initialized'} ${framework}/${target} project at ${root}\n`); + return 0; +} +function parseOptions(argv: readonly string[]): InitOptions { + let framework: Framework = 'foundry'; let target: Target | undefined; let path = '.'; let positional = false; let adopt = false; + for (let i = 0; i < argv.length; i += 1) { + const arg = argv[i]!; + if (arg === '--framework') { + const value = argv[++i]; + if (value !== 'foundry' && value !== 'hardhat') return usage('--framework requires foundry or hardhat'); + framework = value; + } + else if (arg === '--target') { const value = argv[++i]; if (!value) return usage('--target requires tron or evm'); target = parseTarget(value); } + else if (arg === '--adopt') adopt = true; + else if (arg === '-h' || arg === '--help') { process.stdout.write('Usage: sunhat init [--framework ] [--target ] [--adopt] [path]\nDefaults: framework=foundry, target=tron\n'); return process.exit(0) as never; } + else if (arg.startsWith('-')) return usage(`unknown init option ${arg}`); + else { if (positional) return usage('init accepts at most one path'); path = arg; positional = true; } + } + return target ? { framework, target, path, adopt } : { framework, path, adopt }; +} +function validateNativeProject(root: string, framework: Framework): void { + const found = framework === 'foundry' ? existsSync(resolve(root, 'foundry.toml')) : ['js', 'cjs', 'ts'].some(ext => existsSync(resolve(root, `hardhat.config.${ext}`))); + if (!found) throw new CliError(`cannot adopt ${framework}: native configuration not found in ${root}`, 2); +} +function scaffold(root: string, framework: Framework, target: Target): void { + const source = resolve(packageRoot, 'templates', framework); + const destinations = framework === 'hardhat' + ? ['package.json', 'README.md', 'hardhat.config.ts', 'contracts/Counter.sol', 'scripts/deploy.ts', 'test/Counter.test.ts', 'tsconfig.json'] + : ['package.json', 'README.md', 'foundry.toml', 'src/Counter.sol', 'script/Counter.s.sol', 'test/Counter.t.sol']; + const conflict = destinations.find(name => existsSync(resolve(root, name))); + if (conflict) throw new CliError(`refusing to overwrite existing file ${resolve(root, conflict)}`, 2); + if (framework === 'hardhat') { + writeExclusive(resolve(root, 'package.json'), `${JSON.stringify(hardhatPackage(root, target), null, 2)}\n`); + copyExclusive(resolve(source, `README.${target}.md`), resolve(root, 'README.md')); + writeExclusive(resolve(root, 'hardhat.config.ts'), hardhatConfig(target)); + for (const name of ['contracts/Counter.sol', 'scripts/deploy.ts', 'test/Counter.test.ts', 'tsconfig.json']) copyExclusive(resolve(source, name), resolve(root, name)); + } else { + writeExclusive(resolve(root, 'package.json'), `${JSON.stringify(foundryPackage(root, target), null, 2)}\n`); + copyExclusive(resolve(source, `README.${target}.md`), resolve(root, 'README.md')); + writeExclusive(resolve(root, 'foundry.toml'), foundryConfig(target)); + for (const name of ['src/Counter.sol', 'script/Counter.s.sol', 'test/Counter.t.sol']) copyExclusive(resolve(source, name), resolve(root, name)); + } +} +function hardhatPackage(root: string, target: Target): object { + const dependencies: Record = { '@nomicfoundation/hardhat-chai-matchers': '2.0.0', '@nomicfoundation/hardhat-ethers': '3.0.8', '@types/chai': '4.3.0', '@types/mocha': '10.0.0', chai: '4.5.0', ethers: '6.13.0', hardhat: '2.29.1', 'ts-node': '10.9.2', typescript: '5.6.3' }; + if (target === 'tron') dependencies['@openzeppelin/hardhat-tron'] = '0.1.0'; + dependencies.sunhat = sunhatDependency(); + return { name: basename(root), version: '0.1.0', private: true, scripts: { build: 'sunhat compile', test: 'sunhat test' }, devDependencies: dependencies }; +} +function foundryPackage(root: string, target: Target): object { + return { + name: basename(root), version: '0.1.0', private: true, + scripts: { build: 'sunhat build', test: 'sunhat test' }, + devDependencies: { sunhat: sunhatDependency() }, + sunhat: { foundryToolchain: { target, source: target === 'tron' ? 'elsvv/foundry-tron' : 'foundry-rs/foundry' } }, + }; +} +function sunhatDependency(): string { + return `file:${packageRoot}`; +} +function hardhatConfig(target: Target): string { + const imports = `import "@nomicfoundation/hardhat-ethers"; +import "@nomicfoundation/hardhat-chai-matchers"; +`; + if (target === 'evm') { + return `${imports}import type { HardhatUserConfig } from "hardhat/config"; + +const config: HardhatUserConfig = { solidity: "0.8.26" }; + +export default config; +`; + } + return `${imports}import "@openzeppelin/hardhat-tron"; +import type { HardhatUserConfig } from "hardhat/config"; + +const config: HardhatUserConfig = { + solidity: { + version: "0.8.26", + settings: { + optimizer: { enabled: true, runs: 200 }, + evmVersion: "cancun", + viaIR: true, + metadata: { bytecodeHash: "ipfs", useLiteralContent: true }, + }, + }, + tre: { + autoStart: true, + image: "tronbox/tre:dev", + compiler: { target: "tron" }, + }, + defaultNetwork: "tre", + networks: { + tre: { + url: process.env.TRE_URL ?? "http://127.0.0.1:9090/jsonrpc", + tron: true, + // Public TRE genesis development key. + // Never use it on a live network. + accounts: [process.env.TRE_PRIVATE_KEY ?? "0x0000000000000000000000000000000000000000000000000000000000000001"], + }, + }, +}; + +export default config; +`; +} +function foundryConfig(target: Target): string { + const network = target === 'tron' ? 'network = "tron"\nchain_id = 728126428\nevm_version = "cancun"\n' : ''; + return `[profile.default]\nsrc = "src"\nout = "out"\nlibs = ["lib"]\n${network}`; +} +function copyExclusive(from: string, to: string): void { writeExclusive(to, readFileSync(from)); } +function writeExclusive(path: string, data: string | Buffer): void { mkdirSync(dirname(path), { recursive: true }); try { writeFileSync(path, data, { flag: 'wx' }); } catch (error) { throw new CliError(`refusing to overwrite existing file ${path}`, 2); } } diff --git a/src/commands/toolchain.ts b/src/commands/toolchain.ts new file mode 100644 index 0000000..7a33b97 --- /dev/null +++ b/src/commands/toolchain.ts @@ -0,0 +1,76 @@ +import { createHash } from 'node:crypto'; +import { execFile } from 'node:child_process'; +import { chmodSync, mkdirSync, mkdtempSync, renameSync, rmSync, writeFileSync } from 'node:fs'; +import { basename, resolve } from 'node:path'; +import { promisify } from 'node:util'; +import { usage, toolchainError } from '../errors.js'; +import type { Target } from '../project/binding.js'; +import { loadToolchain, sha256 } from '../adapters/foundry.js'; +import { platformKey, releaseFor, releaseUrl } from '../toolchain/releases.js'; + +const execFileAsync = promisify(execFile); + +export async function toolchain(root: string, target: Target, args: readonly string[]): Promise { + const command = args[0]; + if (!command || args.length !== 1 || !['install', 'check', 'info'].includes(command)) return usage('toolchain requires exactly one command: install, check or info'); + if (command === 'install') return await install(root, target); + const lock = loadToolchain(root, target); + if (command === 'check') for (const [tool, item] of Object.entries(lock.binaries)) if (sha256(resolve(root, item.path)) !== item.sha256) return toolchainError(`${tool} digest mismatch`); + process.stdout.write(`framework=foundry\ntarget=${target}\nsource=${lock.source}\nrelease=${lock.release}\nrevision=${lock.revision}\nplatform=${lock.platform}\n`); + return 0; +} + +async function install(root: string, target: Target): Promise { + const release = releaseFor(target); const url = releaseUrl(release); + const response = await fetch(url, { redirect: 'follow' }); + if (!response.ok) return toolchainError(`download failed (${response.status}): ${url}`); + const bytes = Buffer.from(await response.arrayBuffer()); const digest = createHash('sha256').update(bytes).digest('hex'); + if (digest !== release.sha256) return toolchainError(`archive digest mismatch: expected ${release.sha256}, got ${digest}`); + + const toolchains = resolve(root, '.sunhat/toolchains'); mkdirSync(toolchains, { recursive: true }); + // Stage beside the destination so every binary/directory rename stays on its filesystem. + const temporary = mkdtempSync(resolve(toolchains, `.install-${target}-`)); + let lockTemporary: string | undefined; + let preserveBackup = false; + try { + const archive = resolve(temporary, release.archive); const extracted = resolve(temporary, 'extracted'); mkdirSync(extracted); writeFileSync(archive, bytes); + if (release.archive.endsWith('.zip')) await execFileAsync('powershell.exe', ['-NoProfile', '-Command', `Expand-Archive -LiteralPath '${archive.replaceAll("'", "''")}' -DestinationPath '${extracted.replaceAll("'", "''")}'`]); + else await execFileAsync('tar', ['-xzf', archive, '-C', extracted]); + const prepared = resolve(temporary, 'binaries'); mkdirSync(prepared); + const binaries: Record = {}; + for (const [tool, filename] of Object.entries(release.tools)) { + const source = resolve(extracted, filename); const output = resolve(prepared, basename(filename)); renameSync(source, output); chmodSync(output, 0o755); + binaries[tool] = { path: `.sunhat/toolchains/${target}/${basename(filename)}`, sha256: sha256(output) }; + } + const lock = { version: 1, target, source: release.source, release: release.release, revision: release.revision, platform: platformKey(), binaries }; + // The lock may live on a different mount from toolchains; stage beside it too. + lockTemporary = mkdtempSync(resolve(root, '.sunhat/.toolchain-lock-')); + const preparedLock = resolve(lockTemporary, 'toolchain.json'); + writeFileSync(preparedLock, `${JSON.stringify(lock, null, 2)}\n`, { flag: 'wx' }); + + const destination = resolve(toolchains, target); const backup = resolve(temporary, 'previous'); + let backedUp = false; let activated = false; + try { renameSync(destination, backup); backedUp = true; } + catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; } + try { + renameSync(prepared, destination); activated = true; + renameSync(preparedLock, resolve(root, '.sunhat/toolchain.json')); + } catch (error) { + try { + if (activated) rmSync(destination, { recursive: true, force: true }); + if (backedUp) renameSync(backup, destination); + } catch (rollbackError) { + // Never remove the only remaining copy when restoring the old directory fails. + preserveBackup = backedUp; + return toolchainError(`installation failed: ${errorMessage(error)}; rollback failed: ${errorMessage(rollbackError)}${backedUp ? `; previous toolchain preserved at ${backup}` : ''}`); + } + throw error; + } + process.stderr.write(`installed ${release.source}@${release.revision} from ${url}\n`); return 0; + } finally { + if (!preserveBackup) rmSync(temporary, { recursive: true, force: true }); + if (lockTemporary) rmSync(lockTemporary, { recursive: true, force: true }); + } +} + +function errorMessage(error: unknown): string { return error instanceof Error ? error.message : String(error); } diff --git a/src/decs.d.ts b/src/decs.d.ts deleted file mode 100644 index b5d6f17..0000000 --- a/src/decs.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'match-all'; diff --git a/src/defaultArtifacts.ts b/src/defaultArtifacts.ts deleted file mode 100644 index dda154c..0000000 --- a/src/defaultArtifacts.ts +++ /dev/null @@ -1,54 +0,0 @@ -import * as ea from '../extendedArtifacts'; -import * as eaT from '../extendedArtifactsTron'; -import { ExtendedArtifact } from '../types'; - -type DefaultArtifactsName = keyof typeof ea & keyof typeof eaT; -type DefaultArtifacts = { [key in DefaultArtifactsName]: ExtendedArtifact }; - -/* -const isArtifactName = ( - name: string, - artifacts: DefaultArtifacts -): name is DefaultArtifactsName => name in artifacts; -*/ - -export const getDefaultArtifact = ( - name: string | DefaultArtifactsName, - tron: boolean -): ExtendedArtifact => { - let artifacts: DefaultArtifacts = ea; - if (tron) artifacts = eaT; - - switch (name) { - case 'EIP173ProxyWithReceive': - return artifacts.EIP173ProxyWithReceive; - case 'EIP173Proxy': - return artifacts.EIP173Proxy; - case 'OpenZeppelinTransparentProxy': - return artifacts.TransparentUpgradeableProxy; - case 'OptimizedTransparentProxy': - return artifacts.OptimizedTransparentUpgradeableProxy; - case 'UUPS': - return artifacts.ERC1967Proxy; - case 'DefaultProxyAdmin': - return artifacts.ProxyAdmin; - case 'DiamondBase': - return artifacts.Diamond; - case 'DiamondERC165Init': - return artifacts.DiamondERC165Init; - case 'DiamondCutFacet': - return artifacts.DiamondCutFacet; - case 'OwnershipFacet': - return artifacts.OwnershipFacet; - case 'DiamondLoupeFacet': - return artifacts.DiamondLoupeFacet; - default: - /* - * For added safety, we will disable the option of returning an artifact - * that hasn't been expressly listed above. - * The following line can be used for such functionality if needed in the future: - * if (isArtifactName(name, artifacts)) return artifacts[name]; - */ - throw new Error(`default artifact not found for ${name}`); - } -}; diff --git a/src/errors.ts b/src/errors.ts index 70aea33..24b4a46 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -1,25 +1,5 @@ -import { BigNumber } from '@ethersproject/bignumber'; -import { bnReplacer } from './internal/utils'; - -export class UnknownSignerError extends Error { - constructor( - public data: { - from: string; - to?: string; - data?: string; - value?: string | BigNumber; - contract?: { name: string; method: string; args: unknown[] }; - } - ) { - super( - `Unknown Signer for account: ${ - data.from - } Trying to execute the following::\n ${JSON.stringify( - data, - bnReplacer, - ' ' - )}` - ); - Error.captureStackTrace(this, UnknownSignerError); - } +export class CliError extends Error { + constructor(message: string, readonly exitCode = 2) { super(message); this.name = 'CliError'; } } +export function usage(message: string): never { throw new CliError(message, 2); } +export function toolchainError(message: string): never { throw new CliError(message, 3); } diff --git a/src/etherscan.ts b/src/etherscan.ts deleted file mode 100644 index 9561f58..0000000 --- a/src/etherscan.ts +++ /dev/null @@ -1,556 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import fs from 'fs'; -import axios from 'axios'; -import qs from 'qs'; -import path from 'path'; -import { defaultAbiCoder, ParamType } from '@ethersproject/abi'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import chalk from 'chalk'; -import matchAll from 'match-all'; - -function log(...args: any[]) { - console.log(...args); -} - -function logError(...args: any[]) { - console.log(chalk.red(...args)); -} - -function logInfo(...args: any[]) { - console.log(chalk.yellow(...args)); -} - -function logSuccess(...args: any[]) { - console.log(chalk.green(...args)); -} - -function sleep(ms: number) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} - -function writeRequestIfRequested( - write: boolean, - networkName: string, - name: string, - request: string, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - postData: any -) { - if (write) { - try { - fs.mkdirSync('etherscan_requests'); - } catch (e) {} - const folder = `etherscan_requests/${networkName}`; - try { - fs.mkdirSync(folder); - } catch (e) {} - fs.writeFileSync(`${folder}/${name}.formdata`, request); - fs.writeFileSync(`${folder}/${name}.json`, JSON.stringify(postData)); - fs.writeFileSync( - `${folder}/${name}_multi-source.json`, - postData.sourceCode - ); - } -} - -function extractOneLicenseFromSourceFile(source: string): string | undefined { - const licenses = extractLicenseFromSources(source); - if (licenses.length === 0) { - return undefined; - } - return licenses[0]; // TODO error out on multiple SPDX ? -} - -function extractLicenseFromSources(metadata: string): string[] { - const regex = /\/\/\s*\t*SPDX-License-Identifier:\s*\t*(.*?)[\s\\]/g; - const matches = matchAll(metadata, regex).toArray(); - const licensesFound: { [license: string]: boolean } = {}; - const licenses = []; - if (matches) { - for (const match of matches) { - if (!licensesFound[match]) { - licensesFound[match] = true; - licenses.push(match); - } - } - } - return licenses; -} - -function getLicenseType(license: string): undefined | number { - const licenseType = (() => { - if (license === 'None') { - return 1; - } - if (license === 'UNLICENSED') { - return 2; - } - if (license === 'MIT') { - return 3; - } - if (license === 'GPL-2.0') { - return 4; - } - if (license === 'GPL-3.0') { - return 5; - } - if (license === 'LGPL-2.1') { - return 6; - } - if (license === 'LGPL-3.0') { - return 7; - } - if (license === 'BSD-2-Clause') { - return 8; - } - if (license === 'BSD-3-Clause') { - return 9; - } - if (license === 'MPL-2.0') { - return 10; - } - if (license === 'OSL-3.0') { - return 11; - } - if (license === 'Apache-2.0') { - return 12; - } - if (license === 'AGPL-3.0') { - return 13; - } - if (license === 'BUSL-1.1') { - return 14; - } - })(); - return licenseType; -} - -export async function submitSources( - hre: HardhatRuntimeEnvironment, - solcInputsPath: string, - config?: { - contractName?: string; - etherscanApiKey?: string; - license?: string; - fallbackOnSolcInput?: boolean; - forceLicense?: boolean; - sleepBetween?: boolean; - apiUrl?: string; - writePostData?: boolean; - } -): Promise { - config = config || {}; - const fallbackOnSolcInput = config.fallbackOnSolcInput; - const licenseOption = config.license; - const forceLicense = config.forceLicense; - const etherscanApiKey = config.etherscanApiKey; - const sleepBetween = config.sleepBetween; - const all = await hre.deployments.all(); - const networkName = hre.network.name; - let host = config.apiUrl; - if (!host) { - const chainId = await hre.getChainId(); - switch (chainId) { - case '1': - host = 'https://api.etherscan.io'; - break; - case '3': - host = 'https://api-ropsten.etherscan.io'; - break; - case '4': - host = 'https://api-rinkeby.etherscan.io'; - break; - case '5': - host = 'https://api-goerli.etherscan.io'; - break; - case '10': - host = 'https://api-optimistic.etherscan.io'; - break; - case '42': - host = 'https://api-kovan.etherscan.io'; - break; - case '97': - host = 'https://api-testnet.bscscan.com'; - break; - case '56': - host = 'https://api.bscscan.com'; - break; - case '69': - host = 'https://api-kovan-optimistic.etherscan.io'; - break; - case '70': - host = 'https://api.hooscan.com'; - break; - case '77': - host = 'https://blockscout.com/poa/sokol'; - break; - case '128': - host = 'https://api.hecoinfo.com'; - break; - case '137': - host = 'https://api.polygonscan.com'; - break; - case '250': - host = 'https://api.ftmscan.com'; - break; - case '256': - host = 'https://api-testnet.hecoinfo.com'; - break; - case '420': - host = 'https://api-goerli-optimism.etherscan.io'; - break; - case '588': - host = 'https://stardust-explorer.metis.io'; - break; - case '1088': - host = 'https://andromeda-explorer.metis.io'; - break; - case '1284': - host = 'https://api-moonbeam.moonscan.io'; - break; - case '1285': - host = 'https://api-moonriver.moonscan.io'; - break; - case '80001': - host = 'https://api-testnet.polygonscan.com'; - break; - case '4002': - host = 'https://api-testnet.ftmscan.com'; - break; - case '42161': - host = 'https://api.arbiscan.io'; - break; - case '421611': - host = 'https://api-testnet.arbiscan.io'; - break; - case '421613': - host = 'https://api-goerli.arbiscan.io'; - break; - case '43113': - host = 'https://api-testnet.snowtrace.io'; - break; - case '43114': - host = 'https://api.snowtrace.io'; - break; - case '338': - host = 'https://api-testnet.cronoscan.com/api'; - break; - case '25': - host = 'https://api.cronoscan.com/api'; - break; - case '11155111': - host = 'https://api-sepolia.etherscan.io'; - break; - default: - return logError( - `Network with chainId: ${chainId} not supported. You can specify the url manually via --api-url .` - ); - } - } - - async function submit(name: string, useSolcInput?: boolean) { - const deployment = all[name]; - const { address, metadata: metadataString } = deployment; - const abiResponse = await axios.get( - `${host}/api?module=contract&action=getabi&address=${address}&apikey=${etherscanApiKey}` - ); - const { data: abiData } = abiResponse; - let contractABI; - if (abiData.status !== '0') { - try { - contractABI = JSON.parse(abiData.result); - } catch (e) { - logError(e); - return; - } - } - if (contractABI && contractABI !== '') { - log(`already verified: ${name} (${address}), skipping.`); - return; - } - - if (!metadataString) { - logError( - `Contract ${name} was deployed without saving metadata. Cannot submit to etherscan, skipping.` - ); - return; - } - const metadata = JSON.parse(metadataString); - const compilationTarget = metadata.settings?.compilationTarget; - - let contractFilepath; - let contractName; - if (compilationTarget) { - contractFilepath = Object.keys(compilationTarget)[0]; - contractName = compilationTarget[contractFilepath]; - } - - if (!contractFilepath || !contractName) { - return logError( - `Failed to extract contract fully qualified name from metadata.settings.compilationTarget for ${name}. Skipping.` - ); - } - - const contractNamePath = `${contractFilepath}:${contractName}`; - - const contractSourceFile = metadata.sources[contractFilepath].content; - const sourceLicenseType = - extractOneLicenseFromSourceFile(contractSourceFile); - - let license = licenseOption; - if (!sourceLicenseType) { - if (!license) { - return logError( - `no license speccified in the source code for ${name} (${contractNamePath}), Please use option --license ` - ); - } - } else { - if (license && license !== sourceLicenseType) { - if (!forceLicense) { - return logError( - `mismatch for --license option (${licenseOption}) and the one specified in the source code for ${name}.\nLicenses found in source : ${sourceLicenseType}\nYou can use option --force-license to force option --license` - ); - } - } else { - license = sourceLicenseType; - if (!getLicenseType(license)) { - return logError( - `license :"${license}" found in source code for ${name} (${contractNamePath}) but this license is not supported by etherscan, list of supported license can be found here : https://etherscan.io/contract-license-types . This tool expect the SPDX id, except for "None" and "UNLICENSED"` - ); - } - } - } - - const licenseType = getLicenseType(license); - - if (!licenseType) { - return logError( - `license :"${license}" not supported by etherscan, list of supported license can be found here : https://etherscan.io/contract-license-types . This tool expect the SPDX id, except for "None" and "UNLICENSED"` - ); - } - - let solcInput: { - language: string; - settings: any; - sources: Record; - }; - if (useSolcInput) { - const solcInputHash = deployment.solcInputHash; - let solcInputStringFromDeployment: string | undefined; - try { - solcInputStringFromDeployment = fs - .readFileSync(path.join(solcInputsPath, solcInputHash + '.json')) - .toString(); - } catch (e) {} - if (!solcInputStringFromDeployment) { - logError( - `Contract ${name} was deployed without saving solcInput. Cannot submit to etherscan, skipping.` - ); - return; - } - solcInput = JSON.parse(solcInputStringFromDeployment); - } else { - const settings = { ...metadata.settings }; - delete settings.compilationTarget; - solcInput = { - language: metadata.language, - settings, - sources: {}, - }; - for (const sourcePath of Object.keys(metadata.sources)) { - const source = metadata.sources[sourcePath]; - // only content as this fails otherwise - solcInput.sources[sourcePath] = { - content: source.content, - }; - } - } - - // Adding Libraries .... - if (deployment.libraries) { - const settings = solcInput.settings; - settings.libraries = settings.libraries || {}; - for (const libraryName of Object.keys(deployment.libraries)) { - if (!settings.libraries[contractNamePath]) { - settings.libraries[contractNamePath] = {}; - } - settings.libraries[contractNamePath][libraryName] = - deployment.libraries[libraryName]; - } - } - const solcInputString = JSON.stringify(solcInput); - - logInfo(`verifying ${name} (${address}) ...`); - - let constructorArguements: string | undefined; - if (deployment.args) { - const constructor: { inputs: ParamType[] } = deployment.abi.find( - (v) => v.type === 'constructor' - ); - if (constructor) { - constructorArguements = defaultAbiCoder - .encode(constructor.inputs, deployment.args) - .slice(2); - } - } else { - logInfo(`no args found, assuming empty constructor...`); - } - - const postData: { - [fieldName: string]: string | number | void | undefined; // TODO type - } = { - apikey: etherscanApiKey, - module: 'contract', - action: 'verifysourcecode', - contractaddress: address, - sourceCode: solcInputString, - codeformat: 'solidity-standard-json-input', - contractname: contractNamePath, - compilerversion: `v${metadata.compiler.version}`, // see http://etherscan.io/solcversions for list of support versions - constructorArguements, - licenseType, - }; - - const formDataAsString = qs.stringify(postData); - const submissionResponse = await axios.request({ - url: `${host}/api`, - method: 'POST', - headers: { 'content-type': 'application/x-www-form-urlencoded' }, - data: formDataAsString, - }); - const { data: submissionData } = submissionResponse; - - let guid: string; - if (submissionData.status === '1') { - guid = submissionData.result; - } else { - logError( - `contract ${name} failed to submit : "${submissionData.message}" : "${submissionData.result}"`, - submissionData - ); - writeRequestIfRequested( - config?.writePostData || false, - networkName, - name, - formDataAsString, - postData - ); - return; - } - if (!guid) { - logError(`contract submission for ${name} failed to return a guid`); - writeRequestIfRequested( - config?.writePostData || false, - networkName, - name, - formDataAsString, - postData - ); - return; - } - - async function checkStatus(): Promise { - // TODO while loop and delay : - const statusResponse = await axios.get( - `${host}/api?apikey=${etherscanApiKey}`, - { - params: { - guid, - module: 'contract', - action: 'checkverifystatus', - }, - } - ); - const { data: statusData } = statusResponse; - - // blockscout seems to return status == 1 in case of failure - // so we check string first - if (statusData.result === 'Pending in queue') { - return undefined; - } - if (statusData.result !== 'Fail - Unable to verify') { - if (statusData.status === '1') { - // console.log(statusData); - return 'success'; - } - } - logError( - `Failed to verify contract ${name}: ${statusData.message}, ${statusData.result}` - ); - - logError( - JSON.stringify( - { - apikey: 'XXXXXX', - module: 'contract', - action: 'verifysourcecode', - contractaddress: address, - sourceCode: '...', - codeformat: 'solidity-standard-json-input', - contractname: contractNamePath, - compilerversion: `v${metadata.compiler.version}`, // see http://etherscan.io/solcversions for list of support versions - constructorArguements, - licenseType, - }, - null, - ' ' - ) - ); - // logError(JSON.stringify(postData, null, " ")); - // logInfo(postData.sourceCode); - return 'failure'; - } - - logInfo('waiting for result...'); - let result; - while (!result) { - await new Promise((resolve) => setTimeout(resolve, 10 * 1000)); - result = await checkStatus(); - } - - if (result === 'success') { - logSuccess(` => contract ${name} is now verified`); - } - - if (result === 'failure') { - if (!useSolcInput && fallbackOnSolcInput) { - logInfo( - 'Falling back on solcInput. etherscan seems to sometime require full solc-input with all source files, even though this should not be needed. See https://github.com/ethereum/solidity/issues/9573' - ); - await submit(name, true); - } else { - writeRequestIfRequested( - config?.writePostData || false, - networkName, - name, - formDataAsString, - postData - ); - logInfo( - 'Etherscan sometime fails to verify when only metadata sources are given. See https://github.com/ethereum/solidity/issues/9573. You can add the option --solc-input to try with full solc-input sources. This will include all contract source in the etherscan result, even the one not relevant to the contract being verified' - ); - } - } else { - writeRequestIfRequested( - config?.writePostData || false, - networkName, - name, - formDataAsString, - postData - ); - } - } - - if (config.contractName) { - await submit(config.contractName); - } else { - for (const name of Object.keys(all)) { - await submit(name); - - if (sleepBetween) { - // sleep between each verification so we don't exceed the API rate limit - await sleep(500); - } - } - } -} diff --git a/src/globalStore.ts b/src/globalStore.ts deleted file mode 100644 index c0504cd..0000000 --- a/src/globalStore.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Network } from 'hardhat/types'; - -// used a fallback as some plugin might override network fields, see for example : https://github.com/sc-forks/solidity-coverage/issues/624 -export const store: { - networks: { [name: string]: Network }; -} = { - networks: {}, -}; diff --git a/src/hdpath.ts b/src/hdpath.ts deleted file mode 100644 index 02f480e..0000000 --- a/src/hdpath.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import chalk from 'chalk'; - -function logError(...args: any[]) { - console.log(chalk.red(...args)); -} - -export function getDerivationPath(chainId: number): string | undefined { - let coinType; - - switch (chainId) { - case 1: - case 2020 /* Ronin Mainnet */: - case 2021 /* Ronin Testnet */: - coinType = '60'; - break; - case 3: - case 4: - case 5: - coinType = '1'; - break; - default: - logError(`Network with chainId: ${chainId} not supported.`); - return undefined; - } - - const derivationPath = `m/44'/${coinType}'/0'/0`; - return derivationPath; -} diff --git a/src/helpers.ts b/src/helpers.ts deleted file mode 100644 index bd740f2..0000000 --- a/src/helpers.ts +++ /dev/null @@ -1,3612 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { Signer } from '@ethersproject/abstract-signer'; -import { - Web3Provider, - TransactionResponse, - TransactionRequest, -} from '@ethersproject/providers'; -import { getAddress } from '@ethersproject/address'; -import { Contract, PayableOverrides } from '@ethersproject/contracts'; -import * as zk from 'zksync-ethers'; -import { AddressZero } from '@ethersproject/constants'; -import { BigNumber } from '@ethersproject/bignumber'; -import { Wallet } from '@ethersproject/wallet'; -import { keccak256 as solidityKeccak256 } from '@ethersproject/solidity'; -import { zeroPad, hexlify } from '@ethersproject/bytes'; -import { Interface, FunctionFragment } from '@ethersproject/abi'; -import { - Deployment, - DeployResult, - DeploymentsExtension, - DeployOptions, - TxOptions, - CallOptions, - SimpleTx, - Receipt, - Address, - DiamondOptions, - Create2DeployOptions, - FacetCut, - DeploymentSubmission, - ExtendedArtifact, - FacetCutAction, - Facet, - ArtifactData, - ABI, -} from '../types'; -import { PartialExtension } from './internal/types'; -import { UnknownSignerError } from './errors'; -import { filterABI, mergeABIs, recode, countElements } from './utils'; -import fs from 'fs-extra'; - -import oldDiamonBase from './old_diamondbase.json'; -import { Artifact, EthereumProvider } from 'hardhat/types'; -import { DeploymentsManager } from './DeploymentsManager'; -import enquirer from 'enquirer'; -import { - parse as parseTransaction, - Transaction, -} from '@ethersproject/transactions'; -import { getDerivationPath } from './hdpath'; -import { bnReplacer } from './internal/utils'; -import { DeploymentFactory } from './DeploymentFactory'; -import { TronWeb3Provider } from './tron/provider'; -import { TronSigner } from './tron/signer'; -import { CreateSmartContract } from './tron/types'; -import { getDefaultArtifact } from './defaultArtifacts'; -import TronWeb from 'tronweb'; - -let LedgerSigner: any; // TODO type -let ethersprojectHardwareWalletsModule: any | undefined; -let andrestEthersLedgerModule: any | undefined; -let TrezorSigner: any; // TODO type -let hardwareSigner: any; // TODO type - -async function handleSpecificErrors(p: Promise): Promise { - let result: T; - try { - result = await p; - } catch (e) { - if ( - typeof (e as any).message === 'string' && - (e as any).message.indexOf('already known') !== -1 - ) { - console.log( - ` -Exact same transaction already in the pool, node reject duplicates. -You'll need to wait the tx resolve, or increase the gas price via --gasprice (this will use old tx type) - ` - ); - throw new Error( - 'Exact same transaction already in the pool, node reject duplicates' - ); - // console.log( - // `\nExact same transaction already in the pool, node reject duplicates, waiting for it instead...\n` - // ); - // const signedTx = await ethersSigner.signTransaction(unsignedTx); - // const decoded = parseTransaction(signedTx); - // if (!decoded.hash) { - // throw new Error( - // 'tx with same hash already in the pool, failed to decode to get the hash' - // ); - // } - // const txHash = decoded.hash; - // tx = Object.assign(decoded as TransactionResponse, { - // wait: (confirmations: number) => - // provider.waitForTransaction(txHash, confirmations), - // confirmations: 0, - // }); - } else { - console.error((e as any).message, JSON.stringify(e, bnReplacer), e); - throw e; - } - } - return result; -} - -function fixProvider(providerGiven: any): any { - // alow it to be used by ethers without any change - if (providerGiven.sendAsync === undefined) { - providerGiven.sendAsync = ( - req: { - id: number; - jsonrpc: string; - method: string; - params: any[]; - }, - callback: (error: any, result: any) => void - ) => { - providerGiven - .send(req.method, req.params) - .then((result: any) => - callback(null, { result, id: req.id, jsonrpc: req.jsonrpc }) - ) - .catch((error: any) => callback(error, null)); - }; - } - return providerGiven; -} - -function findAll(toFind: string[], array: string[]): boolean { - for (const f of toFind) { - if (array.indexOf(f) === -1) { - return false; - } - } - return true; -} - -function linkRawLibrary( - bytecode: string, - libraryName: string, - libraryAddress: string -): string { - const address = libraryAddress.replace('0x', ''); - let encodedLibraryName; - if (libraryName.startsWith('$') && libraryName.endsWith('$')) { - encodedLibraryName = libraryName.slice(1, libraryName.length - 1); - } else { - encodedLibraryName = solidityKeccak256(['string'], [libraryName]).slice( - 2, - 36 - ); - } - const pattern = new RegExp(`_+\\$${encodedLibraryName}\\$_+`, 'g'); - if (!pattern.exec(bytecode)) { - throw new Error( - `Can't link '${libraryName}' (${encodedLibraryName}) in \n----\n ${bytecode}\n----\n` - ); - } - return bytecode.replace(pattern, address); -} - -function linkRawLibraries( - bytecode: string, - libraries: { [libraryName: string]: Address } -): string { - for (const libName of Object.keys(libraries)) { - const libAddress = libraries[libName]; - bytecode = linkRawLibrary(bytecode, libName, libAddress); - } - return bytecode; -} - -function linkLibraries( - artifact: { - bytecode: string; - linkReferences?: { - [libraryFileName: string]: { - [libraryName: string]: Array<{ length: number; start: number }>; - }; - }; - }, - libraries?: { [libraryName: string]: Address } -) { - let bytecode = artifact.bytecode; - - if (libraries) { - if (artifact.linkReferences) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - for (const [fileName, fileReferences] of Object.entries( - artifact.linkReferences - )) { - for (const [libName, fixups] of Object.entries(fileReferences)) { - const addr = libraries[libName]; - if (addr === undefined) { - continue; - } - - for (const fixup of fixups) { - bytecode = - bytecode.substr(0, 2 + fixup.start * 2) + - addr.substr(2) + - bytecode.substr(2 + (fixup.start + fixup.length) * 2); - } - } - } - } else { - bytecode = linkRawLibraries(bytecode, libraries); - } - } - - // TODO return libraries object with path name : for names - - return bytecode; -} - -export function addHelpers( - deploymentManager: DeploymentsManager, - partialExtension: PartialExtension, - network: any, // TODO work out right config type - getArtifact: (name: string) => Promise, - saveDeployment: ( - name: string, - deployment: DeploymentSubmission, - artifactName?: string - ) => Promise, - willSaveToDisk: () => boolean, - onPendingTx: ( - txResponse: TransactionResponse, - name?: string, - data?: any - ) => Promise, - getGasPrice: () => Promise<{ - gasPrice: BigNumber | undefined; - maxFeePerGas: BigNumber | undefined; - maxPriorityFeePerGas: BigNumber | undefined; - }>, - log: (...args: any[]) => void, - print: (msg: string) => void -): { - extension: DeploymentsExtension; - utils: { - dealWithPendingTransactions: ( - pendingTxs: { - [txHash: string]: { - name: string; - deployment?: any; - rawTx: string; - decoded: { - from: string; - gasPrice?: string; - maxFeePerGas?: string; - maxPriorityFeePerGas?: string; - gasLimit: string; - to: string; - value: string; - nonce: number; - data: string; - r: string; - s: string; - v: number; - // creates: tx.creates, // TODO test - chainId: number; - }; - }; - }, - pendingTxPath: string, - globalGasPrice: string | undefined - ) => Promise; - }; -} { - let provider: Web3Provider | zk.Web3Provider | TronWeb3Provider; - const availableAccounts: { [name: string]: boolean } = {}; - - async function init(): Promise< - Web3Provider | zk.Web3Provider | TronWeb3Provider - > { - if (!provider) { - await deploymentManager.setupAccounts(); - if (network.zksync) { - provider = new zk.Web3Provider(fixProvider(network.provider)); - } else if (network.tron) { - provider = new TronWeb3Provider( - fixProvider(network.provider), - network.config - ); - } else { - provider = new Web3Provider(fixProvider(network.provider)); - } - try { - const accounts = await provider.send('eth_accounts', []); - for (const account of accounts) { - availableAccounts[account.toLowerCase()] = true; - } - - for (const address of deploymentManager.impersonatedAccounts) { - availableAccounts[address.toLowerCase()] = true; - } - } catch (e) {} - } - return provider; - } - - function cleanupOverrides( - txRequestOrOverrides: T - ): T { - if (txRequestOrOverrides.maxFeePerGas === undefined) { - delete txRequestOrOverrides.maxFeePerGas; - } - - if (txRequestOrOverrides.maxPriorityFeePerGas === undefined) { - delete txRequestOrOverrides.maxPriorityFeePerGas; - } - - if (txRequestOrOverrides.gasPrice === undefined) { - delete txRequestOrOverrides.gasPrice; - } - - if (txRequestOrOverrides.value === undefined) { - delete txRequestOrOverrides.value; - } - return txRequestOrOverrides; - } - - async function setupGasPrice( - txRequestOrOverrides: TransactionRequest | PayableOverrides - ) { - const gasPriceSetup = await getGasPrice(); - if (!txRequestOrOverrides.gasPrice) { - txRequestOrOverrides.gasPrice = gasPriceSetup.gasPrice; - } - if (!txRequestOrOverrides.maxFeePerGas) { - txRequestOrOverrides.maxFeePerGas = gasPriceSetup.maxFeePerGas; - } - if (!txRequestOrOverrides.maxPriorityFeePerGas) { - txRequestOrOverrides.maxPriorityFeePerGas = - gasPriceSetup.maxPriorityFeePerGas; - } - cleanupOverrides(txRequestOrOverrides); - } - - async function setupNonce( - from: string, - txRequestOrOverrides: TransactionRequest | PayableOverrides - ) { - if ( - txRequestOrOverrides.nonce === 'pending' || - txRequestOrOverrides.nonce === 'latest' - ) { - txRequestOrOverrides.nonce = await provider.getTransactionCount( - from, - txRequestOrOverrides.nonce - ); - } else if (!txRequestOrOverrides.nonce) { - txRequestOrOverrides.nonce = await provider.getTransactionCount( - from, - 'latest' - ); - } - } - - async function overrideGasLimit( - txRequestOrOverrides: TransactionRequest | PayableOverrides, - options: { - estimatedGasLimit?: number | BigNumber | string; - estimateGasExtra?: number | BigNumber | string; - }, - estimate: ( - txRequestOrOverrides: TransactionRequest | PayableOverrides - ) => Promise - ) { - const estimatedGasLimit = options.estimatedGasLimit - ? BigNumber.from(options.estimatedGasLimit).toNumber() - : undefined; - const estimateGasExtra = options.estimateGasExtra - ? BigNumber.from(options.estimateGasExtra).toNumber() - : undefined; - if (!txRequestOrOverrides.gasLimit) { - txRequestOrOverrides.gasLimit = estimatedGasLimit; - txRequestOrOverrides.gasLimit = ( - await estimate(txRequestOrOverrides) - ).toNumber(); - if (estimateGasExtra) { - txRequestOrOverrides.gasLimit = - txRequestOrOverrides.gasLimit + estimateGasExtra; - if (estimatedGasLimit) { - txRequestOrOverrides.gasLimit = Math.min( - txRequestOrOverrides.gasLimit, - estimatedGasLimit - ); - } - } - } - } - - async function ensureCreate2DeployerReady(options: { - from: string; - log?: boolean; - gasPrice?: string | BigNumber; - maxFeePerGas?: string | BigNumber; - maxPriorityFeePerGas?: string | BigNumber; - }): Promise { - const { - address: from, - ethersSigner, - hardwareWallet, - unknown, - } = await getFrom(options.from); - const create2DeployerAddress = - await deploymentManager.getDeterministicDeploymentFactoryAddress(); - const code = await provider.getCode(create2DeployerAddress); - if (code === '0x') { - const senderAddress = - await deploymentManager.getDeterministicDeploymentFactoryDeployer(); - - // TODO: calculate required funds - const txRequest = { - to: senderAddress, - value: ( - await deploymentManager.getDeterministicDeploymentFactoryFunding( - network.tron - ) - ).toHexString(), - gasPrice: options.gasPrice, - maxFeePerGas: options.maxFeePerGas, - maxPriorityFeePerGas: options.maxPriorityFeePerGas, - }; - await setupGasPrice(txRequest); - await setupNonce(from, txRequest); - - if (unknown) { - throw new UnknownSignerError({ - from, - ...txRequest, - }); - } - - if (options.log || hardwareWallet) { - print( - `sending eth to create2 contract deployer address (${senderAddress})` - ); - if (hardwareWallet) { - print(` (please confirm on your ${hardwareWallet})`); - } - } - - let ethTx = (await handleSpecificErrors( - ethersSigner.sendTransaction(txRequest) - )) as TransactionResponse; - if (options.log || hardwareWallet) { - log(` (tx: ${ethTx.hash})...`); - } - ethTx = await onPendingTx(ethTx); - await ethTx.wait(); - - if (options.log || hardwareWallet) { - print( - `deploying create2 deployer contract (at ${create2DeployerAddress}) using deterministic deployment (https://github.com/Arachnid/deterministic-deployment-proxy)` - ); - if (hardwareWallet) { - print(` (please confirm on your ${hardwareWallet})`); - } - } - const deployTx = await provider.sendTransaction( - await deploymentManager.getDeterministicDeploymentFactoryDeploymentTx() - ); - if (options.log || hardwareWallet) { - log(` (tx: ${deployTx.hash})...`); - } - await deployTx.wait(); - } - return create2DeployerAddress; - } - - async function getArtifactFromOptions( - name: string, - options: DeployOptions - ): Promise<{ - artifact: Artifact; - artifactName?: string; - }> { - let artifact: Artifact; - let artifactName: string | undefined; - if (options.contract) { - if (typeof options.contract === 'string') { - artifactName = options.contract; - artifact = await getArtifact(artifactName); - } else { - artifact = options.contract as Artifact; // TODO better handling - } - } else { - artifactName = name; - artifact = await getArtifact(artifactName); - } - return { artifact, artifactName }; - } - - async function getLinkedArtifact( - name: string, - options: DeployOptions - ): Promise<{ artifact: Artifact; artifactName: string | undefined }> { - // TODO get linked artifact - const { artifact, artifactName } = await getArtifactFromOptions( - name, - options - ); - const byteCode = linkLibraries(artifact, options.libraries); - return { artifact: { ...artifact, bytecode: byteCode }, artifactName }; - } - - async function _deploy( - name: string, - options: DeployOptions - ): Promise { - const args: any[] = options.args ? [...options.args] : []; - await init(); - const { - address: from, - ethersSigner, - hardwareWallet, - unknown, - } = await getFrom(options.from); - - const { artifact: linkedArtifact, artifactName } = await getLinkedArtifact( - name, - options - ); - - const overrides: PayableOverrides = { - gasLimit: options.gasLimit, - gasPrice: options.gasPrice, - maxFeePerGas: options.maxFeePerGas, - maxPriorityFeePerGas: options.maxPriorityFeePerGas, - value: options.value, - nonce: options.nonce, - }; - - const factory = new DeploymentFactory( - getArtifact, - linkedArtifact, - args, - network, - ethersSigner, - overrides - ); - - const unsignedTx = await factory.getDeployTransaction(); - - let create2Address; - if (options.deterministicDeployment) { - // feature not ready for Tron yet - if (network.tron) { - throw new Error('deterministic deployment not supported on Tron'); - } - if (typeof unsignedTx.data === 'string') { - const create2DeployerAddress = await ensureCreate2DeployerReady( - options - ); - const create2Salt = - typeof options.deterministicDeployment === 'string' - ? hexlify(zeroPad(options.deterministicDeployment, 32)) - : '0x0000000000000000000000000000000000000000000000000000000000000000'; - create2Address = await factory.getCreate2Address( - create2DeployerAddress, - create2Salt - ); - unsignedTx.to = create2DeployerAddress; - - unsignedTx.data = create2Salt + unsignedTx.data.slice(2); - } else { - throw new Error('unsigned tx data as bytes not supported'); - } - } - - if (network.tron) { - const feeLimit = await (ethersSigner as TronSigner).getFeeLimit( - unsignedTx, - overrides - ); - (unsignedTx as CreateSmartContract).feeLimit = feeLimit; - } else { - await overrideGasLimit(unsignedTx, options, (newOverrides) => - ethersSigner.estimateGas(newOverrides) - ); - await setupGasPrice(unsignedTx); - await setupNonce(from, unsignedTx); - // Temporary workaround for https://github.com/ethers-io/ethers.js/issues/2078 - // TODO: Remove me when LedgerSigner adds proper support for 1559 txns - if (hardwareWallet === 'ledger') { - unsignedTx.type = 1; - } else if (hardwareWallet === 'trezor') { - unsignedTx.type = 1; - } - } - - if (unknown) { - throw new UnknownSignerError({ - from, - ...JSON.parse(JSON.stringify(unsignedTx, bnReplacer)), - }); - } - - if (options.log || hardwareWallet) { - print(`deploying "${name}"`); - if (hardwareWallet) { - print(` (please confirm on your ${hardwareWallet})`); - } - } - let tx = (await handleSpecificErrors( - ethersSigner.sendTransaction(unsignedTx) - )) as TransactionResponse; - - if (options.log || hardwareWallet) { - print(` (tx: ${tx.hash})...`); - } - - if (options.autoMine) { - try { - await provider.send('evm_mine', []); - } catch (e) {} - } - - let preDeployment = { - ...linkedArtifact, - transactionHash: tx.hash, - args, - linkedData: options.linkedData, - }; - if (artifactName && willSaveToDisk()) { - const extendedArtifact = await partialExtension.getExtendedArtifact( - artifactName - ); - preDeployment = { - ...extendedArtifact, - ...preDeployment, - }; - } - type TronTxInfo = { - receipt?: { - net_usage?: number; - energy_usage_total?: number; - }; - fee?: number; - }; - - tx = await onPendingTx(tx, name, preDeployment); - const receiptPre = await tx.wait(options.waitConfirmations); - const addressPre = - options.deterministicDeployment && create2Address - ? create2Address - : receiptPre.contractAddress; - let receipt; - let address; - let addressHex; - let bandwith; - if (network.tron && ethersSigner instanceof TronSigner) { - const tronwebCurr = ethersSigner.getTronWeb(); - const url = tronwebCurr.fullNode.host.replace(/\/jsonrpc$/, ''); - const tronweb = new TronWeb(url, url, false, false); - receipt = receiptPre; - receipt.from = tronweb.address.fromHex(receiptPre.from); - receipt.to = tronweb.address.fromHex(receiptPre.to); - receipt.contractAddress = tronweb.address.fromHex( - receiptPre.contractAddress - ); - address = tronweb.address.fromHex(addressPre); - addressHex = tronweb.address.toHex(receiptPre.contractAddress); - const resp = (await tronweb.trx.getUnconfirmedTransactionInfo( - tx.hash - )) as TronTxInfo; - if (resp?.receipt?.net_usage != null) { - bandwith = resp?.receipt?.net_usage; - } else if (resp?.fee != null) { - bandwith = resp.fee; - } - } else { - receipt = receiptPre; - address = addressPre; - } - - const argNumbers = countElements(preDeployment.args); - const deployment = { - ...preDeployment, - address, - addressHex, - receipt, - transactionHash: receipt.transactionHash, - libraries: options.libraries, - bandwith: bandwith, - }; - await saveDeployment(name, deployment); - if (options.log || hardwareWallet) { - print( - `: deployed at ${deployment.address} with ${receipt?.gasUsed} gas\n` - ); - } - return { - ...deployment, - address, - newlyDeployed: true, - }; - } - - async function deterministic( - name: string, - options: Create2DeployOptions - ): Promise<{ - address: Address; - implementationAddress?: Address; - deploy: () => Promise; - }> { - options = { ...options }; // ensure no change - await init(); - - const deployFunction = () => - deploy(name, { - ...options, - deterministicDeployment: options.salt || true, - }); - if (options.proxy) { - /* eslint-disable prefer-const */ - let { - viaAdminContract, - proxyAdminDeployed, - proxyAdminName, - proxyAdminContract, - owner, - proxyAdmin, - currentProxyAdminOwner, - artifact, - implementationArgs, - implementationName, - implementationOptions, - proxyName, - proxyContract, - proxyArgsTemplate, - mergedABI, - updateMethod, - updateArgs, - } = await _getProxyInfo(name, options); - /* eslint-enable prefer-const */ - - const { address: implementationAddress } = await deterministic( - implementationName, - { ...implementationOptions, salt: options.salt } - ); - - const implementationContract = new Contract( - implementationAddress, - artifact.abi - ); - - let data = '0x'; - if (updateMethod) { - updateArgs = updateArgs || []; - if (!implementationContract[updateMethod]) { - throw new Error( - `contract need to implement function ${updateMethod}` - ); - } - const txData = await implementationContract.populateTransaction[ - updateMethod - ](...updateArgs); - data = txData.data || '0x'; - } - - if (viaAdminContract) { - if (!proxyAdminName) { - throw new Error( - `no proxy admin name even though viaAdminContract is not undefined` - ); - } - - if (!proxyAdminDeployed) { - const { address: proxyAdminAddress } = await deterministic( - proxyAdminName, - { - from: options.from, - autoMine: options.autoMine, - estimateGasExtra: options.estimateGasExtra, - estimatedGasLimit: options.estimatedGasLimit, - gasPrice: options.gasPrice, - maxFeePerGas: options.maxFeePerGas, - maxPriorityFeePerGas: options.maxPriorityFeePerGas, - log: options.log, - contract: proxyAdminContract, - salt: options.salt, - skipIfAlreadyDeployed: true, - args: [owner], - waitConfirmations: options.waitConfirmations, - } - ); - proxyAdmin = proxyAdminAddress; - } else { - proxyAdmin = proxyAdminDeployed.address; - } - } - - const proxyOptions = { ...options }; // ensure no change - delete proxyOptions.proxy; - delete proxyOptions.libraries; - proxyOptions.contract = proxyContract; - proxyOptions.args = replaceTemplateArgs(proxyArgsTemplate, { - implementationAddress, - proxyAdmin, - data, - }); - const { address: proxyAddress } = await deterministic(proxyName, { - ...proxyOptions, - salt: options.salt, - }); - - return { - address: proxyAddress, - implementationAddress, - deploy: deployFunction, - }; - } else { - const args: any[] = options.args ? [...options.args] : []; - const { - ethersSigner, - unknown, - address: from, - } = await getFrom(options.from); - - const { artifact: linkedArtifact, artifactName } = - await getLinkedArtifact(name, options); - const factory = new DeploymentFactory( - getArtifact, - linkedArtifact, - args, - network, - ethersSigner - ); - - if (unknown) { - throw new UnknownSignerError({ - from, - ...JSON.parse( - JSON.stringify(await factory.getDeployTransaction(), bnReplacer) - ), - }); - } - - return { - address: await factory.getCreate2Address( - await deploymentManager.getDeterministicDeploymentFactoryAddress(), - options.salt - ? hexlify(zeroPad(options.salt, 32)) - : '0x0000000000000000000000000000000000000000000000000000000000000000' - ), - deploy: () => - deploy(name, { - ...options, - deterministicDeployment: options.salt || true, - }), - }; - } - } - - function getDeployment(name: string): Promise { - return partialExtension.get(name); - } - - function getDeploymentOrNUll(name: string): Promise { - return partialExtension.getOrNull(name); - } - - async function fetchIfDifferent( - name: string, - options: DeployOptions - ): Promise<{ differences: boolean; address?: string }> { - options = { ...options }; // ensure no change - const args = options.args ? [...options.args] : []; - await init(); - - const { ethersSigner } = await getFrom(options.from); - const { artifact: linkedArtifact } = await getLinkedArtifact(name, options); - const factory = new DeploymentFactory( - getArtifact, - linkedArtifact, - args, - network, - ethersSigner - ); - - if (options.deterministicDeployment) { - const create2Salt = - typeof options.deterministicDeployment === 'string' - ? hexlify(zeroPad(options.deterministicDeployment, 32)) - : '0x0000000000000000000000000000000000000000000000000000000000000000'; - const create2DeployerAddress = - await deploymentManager.getDeterministicDeploymentFactoryAddress(); - const create2Address = await factory.getCreate2Address( - create2DeployerAddress, - create2Salt - ); - const code = await provider.getCode(create2Address); - if (code === '0x') { - return { differences: true, address: undefined }; - } else { - return { differences: false, address: create2Address }; - } - } - const deployment = await partialExtension.getOrNull(name); - if (deployment) { - if (options.skipIfAlreadyDeployed) { - return { differences: false, address: undefined }; // TODO check receipt, see below - } - // TODO transactionReceipt + check for status - let transactionDetailsAvailable = false; - let transaction; - if (deployment.receipt) { - transactionDetailsAvailable = !!deployment.receipt.transactionHash; - if (transactionDetailsAvailable) { - transaction = await provider.getTransaction( - deployment.receipt.transactionHash - ); - } - } else if (deployment.transactionHash) { - transactionDetailsAvailable = true; - transaction = await provider.getTransaction(deployment.transactionHash); - } - - if (transaction) { - const differences = await factory.compareDeploymentTransaction( - transaction, - deployment - ); - return { differences, address: deployment.address }; - } else { - if (transactionDetailsAvailable) { - throw new Error( - `cannot get the transaction for ${name}'s previous deployment, please check your node synced status.` - ); - } else { - console.error( - `no transaction details found for ${name}'s previous deployment, if the deployment is t be discarded, please delete the file` - ); - return { differences: false, address: deployment.address }; - } - } - } - return { differences: true, address: undefined }; - } - - async function _deployOne( - name: string, - options: DeployOptions, - failsOnExistingDeterminisitc?: boolean - ): Promise { - const argsArray = options.args ? [...options.args] : []; - options = { ...options, args: argsArray }; - - let result: DeployResult; - const diffResult = await fetchIfDifferent(name, options); - if (diffResult.differences) { - result = await _deploy(name, options); - } else { - if (failsOnExistingDeterminisitc && options.deterministicDeployment) { - throw new Error( - `already deployed on same deterministic address: ${diffResult.address}` - ); - } - const deployment = await getDeploymentOrNUll(name); - if (deployment) { - if ( - options.deterministicDeployment && - diffResult.address && - diffResult.address.toLowerCase() !== deployment.address.toLowerCase() - ) { - const { artifact: linkedArtifact, artifactName } = - await getLinkedArtifact(name, options); - - // receipt missing - const newDeployment = { - ...linkedArtifact, - address: diffResult.address, - linkedData: options.linkedData, - libraries: options.libraries, - args: argsArray, - }; - await saveDeployment(name, newDeployment, artifactName); - result = { - ...newDeployment, - newlyDeployed: false, - }; - } else { - result = deployment as DeployResult; - result.newlyDeployed = false; - } - } else { - if (!diffResult.address) { - throw new Error( - 'no differences found but no address, this should be impossible' - ); - } - - const { artifact: linkedArtifact, artifactName } = - await getLinkedArtifact(name, options); - - // receipt missing - const newDeployment = { - ...linkedArtifact, - address: diffResult.address, - linkedData: options.linkedData, - libraries: options.libraries, - args: argsArray, - }; - await saveDeployment(name, newDeployment, artifactName); - result = { - ...newDeployment, - newlyDeployed: false, - }; - } - if (options.log) { - log(`reusing "${name}" at ${result.address}`); - } - } - - return result; - } - - function _checkUpgradeIndex( - oldDeployment: Deployment | null, - upgradeIndex?: number - ): DeployResult | undefined { - if (typeof upgradeIndex === 'undefined') { - return; - } - if (upgradeIndex === 0) { - if (oldDeployment) { - return { ...oldDeployment, newlyDeployed: false }; - } - } else if (upgradeIndex === 1) { - if (!oldDeployment) { - throw new Error( - 'upgradeIndex === 1 : expects Deployments to already exists' - ); - } - if ( - (oldDeployment.history && oldDeployment.history.length > 0) || - (oldDeployment.numDeployments && oldDeployment.numDeployments > 1) - ) { - return { ...oldDeployment, newlyDeployed: false }; - } - } else { - if (!oldDeployment) { - throw new Error( - `upgradeIndex === ${upgradeIndex} : expects Deployments to already exists` - ); - } - - if (!oldDeployment.history) { - if (oldDeployment.numDeployments && oldDeployment.numDeployments > 1) { - if (oldDeployment.numDeployments > upgradeIndex) { - return { ...oldDeployment, newlyDeployed: false }; - } else if (oldDeployment.numDeployments < upgradeIndex) { - throw new Error( - `upgradeIndex === ${upgradeIndex} : expects Deployments numDeployments to be at least ${upgradeIndex}` - ); - } - } else { - throw new Error( - `upgradeIndex > 1 : expects Deployments history to exists, or numDeployments to be greater than 1` - ); - } - } else if (oldDeployment.history.length > upgradeIndex - 1) { - return { ...oldDeployment, newlyDeployed: false }; - } else if (oldDeployment.history.length < upgradeIndex - 1) { - throw new Error( - `upgradeIndex === ${upgradeIndex} : expects Deployments history length to be at least ${ - upgradeIndex - 1 - }` - ); - } - } - } - - async function _getProxyInfo( - name: string, - options: DeployOptions - ): Promise<{ - viaAdminContract: - | string - | { name: string; artifact?: string | ArtifactData } - | undefined; - proxyAdminName: string | undefined; - proxyAdminDeployed: Deployment | undefined; - proxyAdmin: string; - proxyAdminContract: ExtendedArtifact | undefined; - owner: string; - currentProxyAdminOwner: string | undefined; - artifact: ExtendedArtifact; - implementationArgs: any[]; - implementationName: string; - implementationOptions: DeployOptions; - mergedABI: ABI; - proxyName: string; - proxyContract: ExtendedArtifact; - proxyArgsTemplate: any[]; - oldDeployment: Deployment | null; - updateMethod: string | undefined; - updateArgs: any[]; - upgradeIndex: number | undefined; - checkProxyAdmin: boolean; - upgradeMethod: string | undefined; - upgradeArgsTemplate: any[]; - }> { - const { isTronNetworkWithTronSolc } = deploymentManager; - const oldDeployment = await getDeploymentOrNUll(name); - let contractName = options.contract; - let implementationName = name + '_Implementation'; - let updateMethod: string | undefined; - let updateArgs: any[] | undefined; - let upgradeIndex; - const eip173Proxy: ExtendedArtifact = getDefaultArtifact( - 'EIP173Proxy', - isTronNetworkWithTronSolc - ); - let proxyContract: ExtendedArtifact = eip173Proxy; - let checkABIConflict = true; - let checkProxyAdmin = true; - let viaAdminContract: - | string - | { name: string; artifact?: string | ArtifactData } - | undefined; - let proxyArgsTemplate = ['{implementation}', '{admin}', '{data}']; - let upgradeMethod: string | undefined; - let upgradeArgsTemplate: string[] = []; - if (typeof options.proxy === 'object') { - if (options.proxy.proxyArgs) { - proxyArgsTemplate = options.proxy.proxyArgs; - } - upgradeIndex = options.proxy.upgradeIndex; - if (options.proxy.implementationName) { - implementationName = options.proxy.implementationName; - if (implementationName === name) { - throw new Error( - `"implementationName" cannot be equal to the deployment's name (${name}) as this is used for the proxy itself.` - ); - } - if (!contractName) { - contractName = implementationName; - } - } - if ('methodName' in options.proxy) { - updateMethod = options.proxy.methodName; - if ('execute' in options.proxy) { - throw new Error( - `cannot have both "methodName" and "execute" options for proxy` - ); - } - } else if ('execute' in options.proxy && options.proxy.execute) { - if ('methodName' in options.proxy.execute) { - updateMethod = options.proxy.execute.methodName; - updateArgs = options.proxy.execute.args; - if ( - 'init' in options.proxy.execute || - 'onUpgrade' in options.proxy.execute - ) { - throw new Error( - `cannot have both "methodName" and ("onUpgrade" or "init") options for proxy.execute` - ); - } - } else if ( - ('init' in options.proxy.execute && options.proxy.execute.init) || - ('onUpgrade' in options.proxy.execute && - options.proxy.execute.onUpgrade) - ) { - if (oldDeployment) { - updateMethod = options.proxy.execute.onUpgrade?.methodName; - updateArgs = options.proxy.execute.onUpgrade?.args; - } else { - updateMethod = options.proxy.execute.init.methodName; - updateArgs = options.proxy.execute.init.args; - } - } - } - - checkABIConflict = options.proxy.checkABIConflict ?? checkABIConflict; - checkProxyAdmin = options.proxy.checkProxyAdmin ?? checkProxyAdmin; - - if (options.proxy.proxyContract) { - if (typeof options.proxy.proxyContract === 'string') { - try { - proxyContract = await partialExtension.getExtendedArtifact( - options.proxy.proxyContract - ); - } catch (e) {} - if (!proxyContract || proxyContract === eip173Proxy) { - proxyContract = getDefaultArtifact( - options.proxy.proxyContract, - isTronNetworkWithTronSolc - ); - switch (options.proxy.proxyContract) { - case 'EIP173ProxyWithReceive': - case 'EIP173Proxy': - break; // No specific logic, but don't throw an error - case 'OpenZeppelinTransparentProxy': - case 'OptimizedTransparentProxy': - checkABIConflict = false; - viaAdminContract = 'DefaultProxyAdmin'; - break; - case 'UUPS': - checkABIConflict = false; - checkProxyAdmin = false; - proxyArgsTemplate = ['{implementation}', '{data}']; - break; - default: - throw new Error( - `no contract found for ${options.proxy.proxyContract}` - ); - } - } - } - } - if (options.proxy.viaAdminContract) { - viaAdminContract = options.proxy.viaAdminContract; - } - - if (options.proxy.upgradeFunction) { - upgradeMethod = options.proxy.upgradeFunction.methodName; - upgradeArgsTemplate = options.proxy.upgradeFunction.upgradeArgs; - } - } else if (typeof options.proxy === 'string') { - updateMethod = options.proxy; - } - - const proxyName = name + '_Proxy'; - const { address: owner } = await getProxyOwner(options); - const implementationArgs = options.args ? [...options.args] : []; - - // --- Implementation Deployment --- - const implementationOptions = { - contract: contractName || name, - from: options.from, - autoMine: options.autoMine, - estimateGasExtra: options.estimateGasExtra, - estimatedGasLimit: options.estimatedGasLimit, - gasPrice: options.gasPrice, - maxFeePerGas: options.maxFeePerGas, - maxPriorityFeePerGas: options.maxPriorityFeePerGas, - log: options.log, - deterministicDeployment: options.deterministicDeployment, - libraries: options.libraries, - linkedData: options.linkedData, - args: implementationArgs, - skipIfAlreadyDeployed: options.skipIfAlreadyDeployed, - waitConfirmations: options.waitConfirmations, - }; - - const { artifact } = await getArtifactFromOptions( - name, - implementationOptions - ); - - const proxyContractConstructor = proxyContract.abi.find( - (v) => v.type === 'constructor' - ); - // ensure no clash - const mergedABI = mergeABIs([proxyContract.abi, artifact.abi], { - check: checkABIConflict, - skipSupportsInterface: true, // TODO options for custom proxy ? - }).filter((v) => v.type !== 'constructor'); - mergedABI.push(proxyContractConstructor); // use proxy constructor abi - - const constructor = artifact.abi.find( - (fragment: { type: string; inputs: any[] }) => - fragment.type === 'constructor' - ); - - if ( - (!constructor && implementationArgs.length > 0) || - (constructor && constructor.inputs.length !== implementationArgs.length) - ) { - throw new Error( - `The number of arguments passed to not match the number of argument in the implementation constructor. -Please specify the correct number of arguments as part of the deploy options: "args"` - ); - } - - if (updateMethod) { - const updateMethodFound: { - type: string; - inputs: any[]; - name: string; - } = artifact.abi.find( - (fragment: { type: string; inputs: any[]; name: string }) => - fragment.type === 'function' && fragment.name === updateMethod - ); - if (!updateMethodFound) { - throw new Error(`contract need to implement function ${updateMethod}`); - } - - if (!updateArgs) { - if (implementationArgs.length === updateMethodFound.inputs.length) { - updateArgs = implementationArgs; - } else { - throw new Error( - ` -If only the methodName (and no args) is specified for proxy deployment, the arguments used for the implementation contract will be reused for the update method. -This allow your contract to both be deployed directly and deployed via proxy. - -Currently your contract implementation's constructor do not have the same number of arguments as the update method. -You can either changes the contract or use the "execute" options and specify different arguments for the update method. -Note that in this case, the contract deployment will not behave the same if deployed without proxy. - ` - ); - } - } - } - - // this avoid typescript error, but should not be necessary at runtime - if (!updateArgs) { - updateArgs = implementationArgs; - } - - let proxyAdminName: string | undefined; - const proxyAdmin = owner; - let currentProxyAdminOwner: string | undefined; - let proxyAdminDeployed: Deployment | undefined; - let proxyAdminContract: ExtendedArtifact | undefined; - if (viaAdminContract) { - let proxyAdminArtifactNameOrContract: string | ArtifactData | undefined; - if (typeof viaAdminContract === 'string') { - proxyAdminName = viaAdminContract; - proxyAdminArtifactNameOrContract = viaAdminContract; - } else { - proxyAdminName = viaAdminContract.name; - if (!viaAdminContract.artifact) { - proxyAdminDeployed = await partialExtension.get(proxyAdminName); - } - proxyAdminArtifactNameOrContract = viaAdminContract.artifact; - } - - if (typeof proxyAdminArtifactNameOrContract === 'string') { - try { - proxyAdminContract = await partialExtension.getExtendedArtifact( - proxyAdminArtifactNameOrContract - ); - } catch (e) {} - - if (!proxyAdminContract) { - if (viaAdminContract === 'DefaultProxyAdmin') { - proxyAdminContract = getDefaultArtifact( - 'DefaultProxyAdmin', - isTronNetworkWithTronSolc - ); - } else { - throw new Error( - `no contract found for ${proxyAdminArtifactNameOrContract}` - ); - } - } - } else { - proxyAdminContract = proxyAdminArtifactNameOrContract; - } - } - - // Set upgrade function if not defined by the user, based on other options - if (!upgradeMethod) { - if (viaAdminContract) { - if (updateMethod) { - upgradeMethod = 'upgradeAndCall'; - upgradeArgsTemplate = ['{proxy}', '{implementation}', '{data}']; - } else { - upgradeMethod = 'upgrade'; - upgradeArgsTemplate = ['{proxy}', '{implementation}']; - } - } else if (updateMethod) { - upgradeMethod = 'upgradeToAndCall'; - upgradeArgsTemplate = ['{implementation}', '{data}']; - } else { - upgradeMethod = 'upgradeTo'; - upgradeArgsTemplate = ['{implementation}']; - } - } - - return { - proxyName, - proxyContract, - proxyArgsTemplate, - mergedABI, - viaAdminContract, - proxyAdminDeployed, - proxyAdminName, - proxyAdminContract, - owner, - proxyAdmin, - currentProxyAdminOwner, - artifact, - implementationArgs, - implementationName, - implementationOptions, - oldDeployment, - updateMethod, - updateArgs, - upgradeIndex, - checkProxyAdmin, - upgradeMethod, - upgradeArgsTemplate, - }; - } - - async function _deployViaProxy( - name: string, - options: DeployOptions - ): Promise { - /* eslint-disable prefer-const */ - let { - oldDeployment, - updateMethod, - updateArgs, - upgradeIndex, - viaAdminContract, - proxyAdminDeployed, - proxyAdminName, - proxyAdminContract, - owner, - proxyAdmin, - currentProxyAdminOwner, - implementationName, - implementationOptions, - proxyName, - proxyContract, - proxyArgsTemplate, - mergedABI, - checkProxyAdmin, - upgradeMethod, - upgradeArgsTemplate, - } = await _getProxyInfo(name, options); - /* eslint-enable prefer-const */ - - const deployResult = _checkUpgradeIndex(oldDeployment, upgradeIndex); - if (deployResult) { - return deployResult; - } - - if (viaAdminContract) { - if (!proxyAdminName) { - throw new Error( - `no proxy admin name even though viaAdminContract is not undefined` - ); - } - if (!proxyAdminDeployed) { - proxyAdminDeployed = await _deployOne(proxyAdminName, { - from: options.from, - autoMine: options.autoMine, - estimateGasExtra: options.estimateGasExtra, - estimatedGasLimit: options.estimatedGasLimit, - gasPrice: options.gasPrice, - maxFeePerGas: options.maxFeePerGas, - maxPriorityFeePerGas: options.maxPriorityFeePerGas, - log: options.log, - contract: proxyAdminContract, - deterministicDeployment: options.deterministicDeployment, - skipIfAlreadyDeployed: true, - args: [owner], - waitConfirmations: options.waitConfirmations, - }); - } - - proxyAdmin = proxyAdminDeployed.address; - currentProxyAdminOwner = (await read(proxyAdminName, 'owner')) as string; - - if (currentProxyAdminOwner.toLowerCase() !== owner.toLowerCase()) { - throw new Error( - `To change owner/admin, you need to call transferOwnership on ${proxyAdminName}` - ); - } - if (currentProxyAdminOwner === AddressZero) { - throw new Error( - `The Proxy Admin (${proxyAdminName}) belongs to no-one. The Proxy cannot be upgraded anymore` - ); - } - } - - const implementation = await _deployOne( - implementationName, - implementationOptions - ); - - if (!oldDeployment || implementation.newlyDeployed) { - // console.log(`implementation deployed at ${implementation.address} for ${implementation.receipt.gasUsed}`); - const implementationContract = new Contract( - implementation.address, - implementation.abi - ); - - let data = '0x'; - if (updateMethod) { - if (!implementationContract[updateMethod]) { - throw new Error( - `contract need to implement function ${updateMethod}` - ); - } - const txData = await implementationContract.populateTransaction[ - updateMethod - ](...updateArgs); - data = txData.data || '0x'; - } - - let proxy = await getDeploymentOrNUll(proxyName); - if (!proxy) { - const proxyOptions = { ...options }; // ensure no change - delete proxyOptions.proxy; - delete proxyOptions.libraries; - proxyOptions.contract = proxyContract; - - proxyOptions.args = replaceTemplateArgs(proxyArgsTemplate, { - implementationAddress: implementation.address, - proxyAdmin, - data, - }); - - proxy = await _deployOne(proxyName, proxyOptions, true); - // console.log(`proxy deployed at ${proxy.address} for ${proxy.receipt.gasUsed}`); - } else { - let from = options.from; - - const ownerStorage = await provider.getStorageAt( - proxy.address, - '0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103' - ); - const currentOwner = getAddress(`0x${ownerStorage.substr(-40)}`); - if (currentOwner === AddressZero) { - if (checkProxyAdmin) { - throw new Error( - 'The Proxy belongs to no-one. It cannot be upgraded anymore' - ); - } - } else if (currentOwner.toLowerCase() !== proxyAdmin.toLowerCase()) { - throw new Error( - `To change owner/admin, you need to call the proxy directly, it currently is ${currentOwner}` - ); - } else { - from = currentOwner; - } - - const oldProxy = proxy.abi.find( - (frag: { name: string }) => frag.name === 'changeImplementation' - ); - if (oldProxy) { - upgradeMethod = 'changeImplementation'; - upgradeArgsTemplate = ['{implementation}', '{data}']; - } - - const proxyAddress = proxy.address; - const upgradeArgs = replaceTemplateArgs(upgradeArgsTemplate, { - implementationAddress: implementation.address, - proxyAdmin, - data, - proxyAddress, - }); - - if (!upgradeMethod) { - throw new Error(`No upgrade method found, cannot make upgrades`); - } - - let executeReceipt; - if (proxyAdminName) { - if (oldProxy) { - throw new Error(`Old Proxy do not support Proxy Admin contracts`); - } - if (!currentProxyAdminOwner) { - throw new Error(`no currentProxyAdminOwner found in ProxyAdmin`); - } - - executeReceipt = await execute( - proxyAdminName, - { ...options, from: currentProxyAdminOwner }, - upgradeMethod, - ...upgradeArgs - ); - } else { - executeReceipt = await execute( - name, - { ...options, from }, - upgradeMethod, - ...upgradeArgs - ); - } - if (!executeReceipt) { - throw new Error(`could not execute ${upgradeMethod}`); - } - } - const proxiedDeployment: DeploymentSubmission = { - ...proxyContract, - receipt: proxy.receipt, - address: proxy.address, - linkedData: options.linkedData, - abi: mergedABI, - implementation: implementation.address, - args: proxy.args, - execute: updateMethod - ? { - methodName: updateMethod, - args: updateArgs, - } - : undefined, - }; - if (oldDeployment) { - // TODO reenable history with options - if (oldDeployment.history) { - proxiedDeployment.history = proxiedDeployment.history - ? proxiedDeployment.history.concat([oldDeployment]) - : [oldDeployment]; - } - } - await saveDeployment(name, proxiedDeployment); - - const deployment = await partialExtension.get(name); - return { - ...deployment, - newlyDeployed: true, - }; - } else { - if (oldDeployment.implementation !== implementation.address) { - const proxiedDeployment: DeploymentSubmission = { - ...oldDeployment, - implementation: implementation.address, - linkedData: options.linkedData, - abi: mergedABI, - execute: updateMethod - ? { - methodName: updateMethod, - args: updateArgs, - } - : undefined, - }; - - // TODO reenable history with options - if (oldDeployment.history) { - proxiedDeployment.history = proxiedDeployment.history - ? proxiedDeployment.history.concat([oldDeployment]) - : [oldDeployment]; - } - await saveDeployment(name, proxiedDeployment); - } - - const deployment = await partialExtension.get(name); - return { - ...deployment, - newlyDeployed: false, - }; - } - } - - async function getProxyOwner(options: DeployOptions) { - let address = options.from; // admim default to msg.sender - if (typeof options.proxy === 'object') { - address = options.proxy.owner || address; - } - return getFrom(address); - } - - async function getDiamondOwner(options: DiamondOptions) { - let address = options.from; // admim default to msg.sender - address = options.owner || address; - return getFrom(address); - } - - async function getOptionalFrom(from?: string): Promise<{ - address?: Address; - ethersSigner?: Signer; - hardwareWallet?: string; - }> { - if (!from) { - return { - address: from, - ethersSigner: undefined, - hardwareWallet: undefined, - }; - } - return getFrom(from); - } - - let ledgerSigner: any; // TODO type - - async function getFrom(from: string): Promise<{ - address: Address; - ethersSigner: Signer | zk.Signer | TronSigner; - hardwareWallet?: string; - unknown: boolean; - }> { - let ethersSigner: Signer | zk.Signer | TronSigner | undefined; - let wallet: Wallet | zk.Wallet | TronSigner | undefined; - let hardwareWallet: string | undefined = undefined; - let unknown = false; - let derivationPath: string | undefined = undefined; - - if (from.length >= 64) { - if (from.length === 64) { - from = '0x' + from; - } - if (network.zksync) { - wallet = new zk.Wallet(from, provider as zk.Provider); - ethersSigner = wallet as unknown as zk.Signer; - } else if (network.tron) { - wallet = (provider as TronWeb3Provider).addSigner(from); - ethersSigner = wallet; - } else { - wallet = new Wallet(from, provider); - ethersSigner = wallet; - } - from = wallet.address; - } else { - if (availableAccounts[from.toLowerCase()]) { - ethersSigner = provider.getSigner(from); - } else { - // TODO register protocol based account as availableAccounts ? if so do not else here - const registeredProtocol = - deploymentManager.addressesToProtocol[from.toLowerCase()]; - if (registeredProtocol) { - if (registeredProtocol === 'external') { - ethersSigner = provider.getSigner(from); //new WaitingTxSigner(from, provider); - ethersSigner.sendTransaction = async ( - txRequest: TransactionRequest - ) => { - const response: { hash: string } = await enquirer.prompt({ - type: 'input', - name: 'hash', - message: ` - tx hash please - to : ${txRequest.to} - data : ${txRequest.data} - value : ${txRequest.value} - `, - }); - - return provider.getTransaction(response.hash); - }; - hardwareWallet = 'external'; - } else if (registeredProtocol.startsWith('ledger')) { - if (!LedgerSigner) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - let error: any | undefined; - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - ethersprojectHardwareWalletsModule = require('@ethersproject/hardware-wallets'); - LedgerSigner = ethersprojectHardwareWalletsModule.LedgerSigner; - } catch (e) { - error = e; - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - andrestEthersLedgerModule = require('@anders-t/ethers-ledger'); - LedgerSigner = andrestEthersLedgerModule.LedgerSigner; - error = undefined; - } catch (e) { - error = e; - } - } - - if (error) { - console.error( - `failed to loader hardhware wallet module for ledger, you can either use "@ethersproject/hardware-wallets" which as time of writing does not work or use "@anders-t/ethers-ledger."` - ); - throw error; - } - } - - // make sure to close an existing connection before every transaction since it's currently not being handled - // properly by ethers - if (ledgerSigner) { - const __eth = await ledgerSigner._eth; - await __eth.transport.device.close(); - - ledgerSigner = undefined; - } - - if (ethersprojectHardwareWalletsModule) { - derivationPath = getDerivationPath(network.config.chainId); - ethersSigner = new LedgerSigner( - provider, - 'default', - derivationPath - ); - } else { - ethersSigner = new LedgerSigner(provider, registeredProtocol); - } - - ledgerSigner = ethersSigner; - } else if (registeredProtocol.startsWith('trezor')) { - if (!TrezorSigner) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - let error: any | undefined; - try { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const hardwareWalletModule = require('@nxqbao/eth-signer-trezor'); - derivationPath = getDerivationPath(network.config.chainId); - - if (!derivationPath) { - throw new Error( - `network is currently unsupported with trezor` - ); - } - - TrezorSigner = hardwareWalletModule.TrezorSigner; - } catch (e) { - error = e; - } - - if (error) { - console.error( - `failed to loader hardware wallet module for trezor` - ); - throw error; - } - } - - if (!hardwareSigner) { - hardwareSigner = new TrezorSigner( - provider, - derivationPath, - undefined, // TODO: support fetch by index - from, - 'hardhat-deploy-trezor' - ); - } - ethersSigner = hardwareSigner; - hardwareWallet = 'trezor'; - } else if (registeredProtocol.startsWith('privatekey')) { - ethersSigner = new Wallet(registeredProtocol.substr(13), provider); - } else if (registeredProtocol.startsWith('gnosis')) { - ethersSigner = new Wallet(registeredProtocol.substr(13), provider); - } - } - } - } - - if (!ethersSigner) { - unknown = true; - ethersSigner = provider.getSigner(from); - } - - return { address: from, ethersSigner, hardwareWallet, unknown }; - } - - // async function findEvents(contract: Contract, event: string, blockHash: string): Promise { - // // TODO type the return type - // const filter = contract.filters[event](); - // const events = await contract.queryFilter(filter, blockHash); - // return events; - // } - - function sigsFromABI(abi: any[]): string[] { - return abi - .filter((fragment: any) => fragment.type === 'function') - .map((fragment: any) => - Interface.getSighash(FunctionFragment.from(fragment)) - ); - } - - async function _deployViaDiamondProxy( - name: string, - options: DiamondOptions - ): Promise { - const { isTronNetworkWithTronSolc } = deploymentManager; - let proxy: Deployment | undefined; - const proxyName = name + '_DiamondProxy'; - const oldDeployment = await getDeploymentOrNUll(name); - if (oldDeployment) { - proxy = await getDeployment(proxyName); - } - if (proxy && proxy.deployedBytecode === oldDiamonBase.deployedBytecode) { - return _old_deployViaDiamondProxy(name, options); - } - - const deployResult = _checkUpgradeIndex( - oldDeployment, - options.upgradeIndex - ); - if (deployResult) { - return deployResult; - } - - let diamondArtifact: ExtendedArtifact = getDefaultArtifact( - 'DiamondBase', - isTronNetworkWithTronSolc - ); - - if (options.diamondContract) { - if (typeof options.diamondContract === 'string') { - diamondArtifact = await partialExtension.getExtendedArtifact( - options.diamondContract - ); - } else { - diamondArtifact = options.diamondContract; - } - } - - const { address: owner } = await getDiamondOwner(options); - const newSelectors: string[] = []; - const facetSnapshot: Facet[] = []; - let oldFacets: Facet[] = []; - if (proxy) { - const diamondProxy = new Contract(proxy.address, proxy.abi, provider); - oldFacets = await diamondProxy.facets(); - } - // console.log({ oldFacets: JSON.stringify(oldFacets, null, " ") }); - - const facetsSet = [...options.facets]; - if (options.defaultCutFacet === undefined || options.defaultCutFacet) { - facetsSet.push({ - name: '_DefaultDiamondCutFacet', - contract: getDefaultArtifact( - 'DiamondCutFacet', - isTronNetworkWithTronSolc - ), - args: [], - deterministic: true, - }); - } - if ( - options.defaultOwnershipFacet === undefined || - options.defaultOwnershipFacet - ) { - facetsSet.push({ - name: '_DefaultDiamondOwnershipFacet', - contract: getDefaultArtifact( - 'OwnershipFacet', - isTronNetworkWithTronSolc - ), - args: [], - deterministic: true, - }); - } - facetsSet.push({ - name: '_DefaultDiamondLoupeFacet', - contract: getDefaultArtifact( - 'DiamondLoupeFacet', - isTronNetworkWithTronSolc - ), - args: [], - deterministic: true, - }); - - let changesDetected = !oldDeployment; - let abi: any[] = diamondArtifact.abi.concat([]); - const facetCuts: FacetCut[] = []; - let facetFound: string | undefined; - const excludeSelectors: Record = - options.excludeSelectors || {}; - for (const facet of facetsSet) { - let deterministicFacet: string | boolean = true; - let facetName; - let artifact; - let linkedData = options.linkedData; - let libraries = options.libraries; - let facetArgs = options.facetsArgs; - if (typeof facet !== 'string') { - if (facet.deterministic !== undefined) { - deterministicFacet = facet.deterministic; - } - } - let argsSpecific = false; - if (typeof facet === 'string') { - artifact = await partialExtension.getExtendedArtifact(facet); - facetName = facet; - } else { - if (facet.linkedData) { - linkedData = facet.linkedData; - } - if (facet.libraries) { - libraries = facet.libraries; - } - if (facet.args !== undefined) { - // TODO fix in master - facetArgs = facet.args; - argsSpecific = true; - } - if (facet.contract) { - if (typeof facet.contract === 'string') { - artifact = await partialExtension.getExtendedArtifact( - facet.contract - ); - } else { - artifact = facet.contract; - } - } else { - if (!facet.name) { - throw new Error( - `no name , not contract is specified for facet, cannot proceed` - ); - } - artifact = await partialExtension.getExtendedArtifact(facet.name); - } - - facetName = facet.name; - if (!facetName) { - if (typeof facet.contract === 'string') { - facetName = name + '_facet_' + facet.contract; - } else { - throw new Error(`facet has no name, please specify one`); - } - } - } - const constructor = artifact.abi.find( - (fragment: { type: string; inputs: any[] }) => - fragment.type === 'constructor' - ); - if (!argsSpecific && (!constructor || constructor.inputs.length === 0)) { - // reset args for case where facet do not expect any and there was no specific args set on it - facetArgs = []; - } - let excludeSighashes: Set = new Set(); - if (facetName in excludeSelectors) { - const iface = new Interface(artifact.abi); - excludeSighashes = new Set( - excludeSelectors[facetName].map((selector) => - iface.getSighash(selector) - ) - ); - } - abi = mergeABIs([abi, filterABI(artifact.abi, excludeSighashes)], { - check: true, - skipSupportsInterface: false, - }); - const implementation = await _deployOne(facetName, { - contract: artifact, - from: options.from, - autoMine: options.autoMine, - estimateGasExtra: options.estimateGasExtra, - estimatedGasLimit: options.estimatedGasLimit, - gasPrice: options.gasPrice, - maxFeePerGas: options.maxFeePerGas, - maxPriorityFeePerGas: options.maxPriorityFeePerGas, - log: options.log, - libraries, - linkedData, - args: facetArgs, - deterministicDeployment: deterministicFacet, - }); - let facetAddress: string; - if (implementation.newlyDeployed) { - // console.log(`facet ${facet} deployed at ${implementation.address}`); - facetAddress = implementation.address; - const newFacet = { - facetAddress, - functionSelectors: sigsFromABI( - filterABI(implementation.abi, excludeSighashes) - ), - }; - facetSnapshot.push(newFacet); - newSelectors.push(...newFacet.functionSelectors); - } else { - const oldImpl = await getDeployment(facetName); - facetAddress = oldImpl.address; - const newFacet = { - facetAddress, - functionSelectors: sigsFromABI( - filterABI(oldImpl.abi, excludeSighashes) - ), - }; - facetSnapshot.push(newFacet); - newSelectors.push(...newFacet.functionSelectors); - } - - if (options.execute && !options.execute.contract) { - const methods = artifact.abi.filter( - (v) => v.name === options.execute?.methodName - ); - if (methods.length > 0) { - if (methods.length > 1) { - throw new Error( - `multiple method named "${options.execute.methodName}" found in facet` - ); - } else { - if (facetFound) { - throw new Error( - `multiple facet with method named "${options.execute.methodName}"` - ); - } else { - facetFound = facetAddress; - } - } - } - } - } - - const oldSelectors: string[] = []; - const oldSelectorsFacetAddress: { [selector: string]: string } = {}; - for (const oldFacet of oldFacets) { - for (const selector of oldFacet.functionSelectors) { - oldSelectors.push(selector); - oldSelectorsFacetAddress[selector] = oldFacet.facetAddress; - } - } - - for (const newFacet of facetSnapshot) { - const selectorsToAdd: string[] = []; - const selectorsToReplace: string[] = []; - - for (const selector of newFacet.functionSelectors) { - // TODO fix in master >0 to transform into >= 0 - if (oldSelectors.indexOf(selector) >= 0) { - if ( - oldSelectorsFacetAddress[selector].toLowerCase() !== - newFacet.facetAddress.toLowerCase() - ) { - selectorsToReplace.push(selector); - } - } else { - selectorsToAdd.push(selector); - } - } - - if (selectorsToReplace.length > 0) { - changesDetected = true; - facetCuts.push({ - facetAddress: newFacet.facetAddress, - functionSelectors: selectorsToReplace, - action: FacetCutAction.Replace, - }); - } - - if (selectorsToAdd.length > 0) { - changesDetected = true; - facetCuts.push({ - facetAddress: newFacet.facetAddress, - functionSelectors: selectorsToAdd, - action: FacetCutAction.Add, - }); - } - } - - const selectorsToDelete: string[] = []; - for (const selector of oldSelectors) { - if (newSelectors.indexOf(selector) === -1) { - selectorsToDelete.push(selector); - } - } - - if (selectorsToDelete.length > 0) { - changesDetected = true; - facetCuts.unshift({ - facetAddress: '0x0000000000000000000000000000000000000000', - functionSelectors: selectorsToDelete, - action: FacetCutAction.Remove, - }); - } - - let executeData = '0x'; - let executeAddress = '0x0000000000000000000000000000000000000000'; - if (options.execute) { - let addressSpecified: string | undefined; - let executionContract = new Contract( - '0x0000000000000000000000000000000000000001', - abi - ); - if (options.execute.contract) { - if (typeof options.execute.contract === 'string') { - const executionDeployment = await _deployOne( - options.execute.contract, - { - from: options.from, - autoMine: options.autoMine, - estimateGasExtra: options.estimateGasExtra, - estimatedGasLimit: options.estimatedGasLimit, - gasPrice: options.gasPrice, - maxFeePerGas: options.maxFeePerGas, - maxPriorityFeePerGas: options.maxPriorityFeePerGas, - log: options.log, - deterministicDeployment: true, - } - ); - executionContract = new Contract( - executionDeployment.address, - executionDeployment.abi - ); - addressSpecified = executionContract.address; - } else { - const executionDeployment = await _deployOne( - options.execute.contract.name, - { - from: options.from, - contract: options.execute.contract.artifact, - args: options.execute.contract.args, - autoMine: options.autoMine, - estimateGasExtra: options.estimateGasExtra, - estimatedGasLimit: options.estimatedGasLimit, - gasPrice: options.gasPrice, - maxFeePerGas: options.maxFeePerGas, - maxPriorityFeePerGas: options.maxPriorityFeePerGas, - log: options.log, - deterministicDeployment: true, - } - ); - executionContract = new Contract( - executionDeployment.address, - executionDeployment.abi - ); - } - } - const txData = await executionContract.populateTransaction[ - options.execute.methodName - ](...options.execute.args); - executeData = txData.data || '0x'; - executeAddress = - addressSpecified || - facetFound || - '0x0000000000000000000000000000000000000000'; - } - - if (changesDetected) { - if (!proxy) { - // TODO initializations only in case of new diamond - // upgrade skip these - - // const initializations = []; - - // const interfaceList = ['0x']; // TODO - // if (options.defaultCutFacet) { - // interfaceList.push('0x'); // TODO - // } - // if (options.defaultOwnershipFacet) { - // interfaceList.push('0x'); // TODO - // } - // const diamondERC165InitDeployment = await _deployOne( - // '_DiamondERC165Init', - // { - // from: options.from, - // deterministicDeployment: true, - // contract: diamondERC165Init, - // autoMine: options.autoMine, - // estimateGasExtra: options.estimateGasExtra, - // estimatedGasLimit: options.estimatedGasLimit, - // gasPrice: options.gasPrice, - // maxFeePerGas: options.maxFeePerGas, - // maxPriorityFeePerGas: options.maxPriorityFeePerGas, - // log: options.log, - // } - // ); - // const diamondERC165InitContract = new Contract( - // diamondERC165InitDeployment.address, - // diamondERC165InitDeployment.abi - // ); - // const interfaceInitTx = - // await diamondERC165InitContract.populateTransaction.setERC165( - // interfaceList, - // [] - // ); - // initializations.push({ - // initContract: diamondERC165InitDeployment.address, - // initData: interfaceInitTx.data, - // }); - // if (executeData) { - // initializations.push({ - // initContract: executeData, - // initData: executeAddress, - // }); - // } - // const diamondConstructorArgs = [owner, facetCuts, initializations]; - - const diamondConstructorArgs = options.diamondContractArgs || [ - '{owner}', - '{facetCuts}', - '{initializations}', - ]; - - const initializationsArgIndex = - diamondConstructorArgs.indexOf('{initializations}'); - const erc165InitArgIndex = diamondConstructorArgs.indexOf('{erc165}'); - const initArgIndex = diamondConstructorArgs.indexOf('{init}'); - const initAddressArgIndex = - diamondConstructorArgs.indexOf('{initAddress}'); - const initDataArgIndex = diamondConstructorArgs.indexOf('{initData}'); - const ownerArgIndex = diamondConstructorArgs.indexOf('{owner}'); - const facetCutsArgIndex = diamondConstructorArgs.indexOf('{facetCuts}'); - if ( - initializationsArgIndex >= 0 && - (initArgIndex >= 0 || - erc165InitArgIndex >= 0 || - initDataArgIndex >= 0) - ) { - throw new Error( - `{initializations} found but also one or more of {init} {erc165} {initData}` - ); - } - - // TODO option to add more to the list - // else mechanism to set it up differently ? LoupeFacet without supportsInterface - const interfaceList = ['0x48e2b093']; - if (options.defaultCutFacet) { - interfaceList.push('0x1f931c1c'); - } - if (options.defaultOwnershipFacet) { - interfaceList.push('0x7f5828d0'); - } - - if (initializationsArgIndex >= 0 || erc165InitArgIndex >= 0) { - const diamondERC165InitDeployment = await _deployOne( - '_DefaultDiamondERC165Init', - { - from: options.from, - deterministicDeployment: true, - contract: getDefaultArtifact( - 'DiamondERC165Init', - isTronNetworkWithTronSolc - ), - autoMine: options.autoMine, - estimateGasExtra: options.estimateGasExtra, - estimatedGasLimit: options.estimatedGasLimit, - gasPrice: options.gasPrice, - maxFeePerGas: options.maxFeePerGas, - maxPriorityFeePerGas: options.maxPriorityFeePerGas, - log: options.log, - } - ); - const diamondERC165InitContract = new Contract( - diamondERC165InitDeployment.address, - diamondERC165InitDeployment.abi - ); - const interfaceInitTx = - await diamondERC165InitContract.populateTransaction.setERC165( - interfaceList, - [] - ); - if (initializationsArgIndex >= 0) { - const initializations = []; - initializations.push({ - initContract: interfaceInitTx.to, - initData: interfaceInitTx.data, - }); - diamondConstructorArgs[initializationsArgIndex] = initializations; - } else { - diamondConstructorArgs[erc165InitArgIndex] = { - initContract: interfaceInitTx.to, - initData: interfaceInitTx.data, - }; - } - } - - if (ownerArgIndex >= 0) { - diamondConstructorArgs[ownerArgIndex] = owner; - } else { - // TODO ? - } - - if (facetCutsArgIndex >= 0) { - diamondConstructorArgs[facetCutsArgIndex] = facetCuts; - } else { - throw new Error(`diamond constructor needs a {facetCuts} argument`); - } - - if (executeData) { - if (initializationsArgIndex >= 0) { - if (executeData !== '0x') { - diamondConstructorArgs[initializationsArgIndex].push({ - initContract: executeAddress, - initData: executeData, - }); - } - } else { - if (initArgIndex >= 0) { - diamondConstructorArgs[initArgIndex] = { - initContract: executeAddress, - initData: executeData, - }; - } else if (initDataArgIndex >= 0) { - diamondConstructorArgs[initDataArgIndex] = executeData; - if (initAddressArgIndex >= 0) { - diamondConstructorArgs[initAddressArgIndex] = executeAddress; - } - } else { - throw new Error( - `no {init} or {initData} found in list of args even though execute is set in option` - ); - } - } - } - - let deterministicDiamondAlreadyDeployed = false; - let expectedAddress: string | undefined = undefined; - let salt = - '0x0000000000000000000000000000000000000000000000000000000000000000'; - if (typeof options.deterministicSalt !== 'undefined') { - if (typeof options.deterministicSalt === 'string') { - if (options.deterministicSalt === salt) { - throw new Error( - `deterministicSalt cannot be 0x000..., it needs to be a non-zero bytes32 salt. This is to ensure you are explicitly specyfying different addresses for multiple diamonds` - ); - } else { - if (options.deterministicSalt.length !== 66) { - throw new Error( - `deterministicSalt needs to be a string of 66 hexadecimal characters (including the 0x prefix)` - ); - } - salt = options.deterministicSalt; - - const factory = new DeploymentFactory( - getArtifact, - diamondArtifact, - diamondConstructorArgs, - network - ); - - const create2DeployerAddress = - await deploymentManager.getDeterministicDeploymentFactoryAddress(); - expectedAddress = await factory.getCreate2Address( - create2DeployerAddress, - salt - ); - const code = await provider.getCode(expectedAddress); - if (code !== '0x') { - deterministicDiamondAlreadyDeployed = true; - } - } - } else { - throw new Error( - `deterministicSalt need to be a string, an non-zero bytes32 salt` - ); - } - } - - if (expectedAddress && deterministicDiamondAlreadyDeployed) { - proxy = { - ...diamondArtifact, - address: expectedAddress, - args: diamondConstructorArgs, - }; - await saveDeployment(proxyName, proxy); - await saveDeployment(name, { - ...proxy, - linkedData: options.linkedData, - facets: facetSnapshot, - abi, - }); - await _deployViaDiamondProxy(name, options); // this would not recurse again as the name and proxyName are now saved - } else { - proxy = await _deployOne(proxyName, { - contract: diamondArtifact, - from: options.from, - args: diamondConstructorArgs, - autoMine: options.autoMine, - deterministicDeployment: options.deterministicSalt, - estimateGasExtra: options.estimateGasExtra, - estimatedGasLimit: options.estimatedGasLimit, - gasLimit: options.gasLimit, - gasPrice: options.gasPrice, - log: options.log, - nonce: options.nonce, - maxFeePerGas: options.maxFeePerGas, - maxPriorityFeePerGas: options.maxPriorityFeePerGas, - value: options.value, - }); - - await saveDeployment(proxyName, { ...proxy, abi }); - await saveDeployment(name, { - ...proxy, - linkedData: options.linkedData, - facets: facetSnapshot, - abi, - execute: options.execute, - }); - } - } else { - if (!oldDeployment) { - throw new Error(`Cannot find Deployment for ${name}`); - } - const currentOwner = await read(proxyName, 'owner'); - if (currentOwner.toLowerCase() !== owner.toLowerCase()) { - throw new Error( - 'To change owner, you need to call `transferOwnership`' - ); - } - if (currentOwner === AddressZero) { - throw new Error( - 'The Diamond belongs to no-one. It cannot be upgraded anymore' - ); - } - - const executeReceipt = await execute( - name, - { ...options, from: currentOwner }, - 'diamondCut', - facetCuts, - executeData === '0x' - ? '0x0000000000000000000000000000000000000000' - : executeAddress || proxy.address, // TODO || proxy.address should not be required, the facet should have been found - executeData - ); - if (!executeReceipt) { - throw new Error('failed to execute'); - } - - const diamondDeployment: DeploymentSubmission = { - ...oldDeployment, - linkedData: options.linkedData, - address: proxy.address, - abi, - facets: facetSnapshot, - execute: options.execute, // TODO add receipt + tx hash - }; - - // TODO reenable history with options - if (oldDeployment.history) { - diamondDeployment.history = diamondDeployment.history - ? diamondDeployment.history.concat([oldDeployment]) - : [oldDeployment]; - } - - await saveDeployment(name, diamondDeployment); - } - - const deployment = await partialExtension.get(name); - return { - ...deployment, - newlyDeployed: true, - }; - } else { - // const oldDeployment = await partialExtension.get(name); - - // const proxiedDeployment: DeploymentSubmission = { - // ...oldDeployment, - // facets: facetSnapshot, - // abi, - // execute: options.execute, - // }; - // // TODO ? - // // proxiedDeployment.history = proxiedDeployment.history - // // ? proxiedDeployment.history.concat([oldDeployment]) - // // : [oldDeployment]; - // await saveDeployment(name, proxiedDeployment); - - const deployment = await partialExtension.get(name); - return { - ...deployment, - newlyDeployed: false, - }; - } - } - - async function deploy( - name: string, - options: DeployOptions - ): Promise { - options = { ...options }; // ensure no change - await init(); - if (!options.proxy) { - return _deployOne(name, options); - } - return _deployViaProxy(name, options); - } - - async function diamond( - name: string, - options: DiamondOptions - ): Promise { - options = { ...options }; // ensure no change - await init(); - return _deployViaDiamondProxy(name, options); - } - - async function rawTx(tx: SimpleTx): Promise { - tx = { ...tx }; - await init(); - const { - address: from, - ethersSigner, - hardwareWallet, - unknown, - } = await getFrom(tx.from); - - const transactionData = { - to: tx.to, - gasLimit: tx.gasLimit, - gasPrice: tx.gasPrice ? BigNumber.from(tx.gasPrice) : undefined, - maxFeePerGas: tx.maxFeePerGas - ? BigNumber.from(tx.maxFeePerGas) - : undefined, - maxPriorityFeePerGas: tx.maxPriorityFeePerGas - ? BigNumber.from(tx.maxPriorityFeePerGas) - : undefined, - value: tx.value ? BigNumber.from(tx.value) : undefined, - nonce: tx.nonce, - data: tx.data, - }; - - await overrideGasLimit(transactionData, tx, (newOverrides) => - ethersSigner.estimateGas(newOverrides) - ); - await setupGasPrice(transactionData); - await setupNonce(from, transactionData); - - if (unknown) { - throw new UnknownSignerError({ - from, - ...transactionData, - }); - } - - if (hardwareWallet) { - log(` please confirm on your ${hardwareWallet}`); - } - let pendingTx = (await handleSpecificErrors( - ethersSigner.sendTransaction(transactionData) - )) as TransactionResponse; - pendingTx = await onPendingTx(pendingTx); - if (tx.autoMine) { - try { - await provider.send('evm_mine', []); - } catch (e) {} - } - return pendingTx.wait(); - } - - async function catchUnknownSigner( - action: Promise | (() => Promise), - options?: { log?: boolean } - ): Promise { - const outputLog = !options || options.log === undefined || options.log; - try { - if (action instanceof Promise) { - await action; - } else { - await action(); - } - } catch (e) { - if (e instanceof UnknownSignerError) { - const { from, to, data, value, contract } = e.data; - if (outputLog) { - console.log( - `---------------------------------------------------------------------------------------` - ); - console.error('no signer for ' + from); - console.log(`Please execute the following:`); - console.log( - `---------------------------------------------------------------------------------------` - ); - if (contract) { - console.log( - ` -from: ${from} -to: ${to} (${contract.name})${ - value - ? '\nvalue: ' + - (typeof value === 'string' ? value : value.toString()) - : '' - } -method: ${contract.method} -args: - - ${contract.args.join('\n - ')} - -(raw data: ${data} ) -` - ); - } else { - console.log( - ` -from: ${from} -to: ${to ? to : '0x0000000000000000000000000000000000000000'}${ - value - ? '\nvalue: ' + - (typeof value === 'string' ? value : value.toString()) - : '' - } -data: ${data} -` - ); - } - console.log( - `---------------------------------------------------------------------------------------` - ); - } - if (!value || typeof value === 'string') { - return { from, to, value, data }; - } - return { from, to, value: value?.toString(), data }; - } else { - throw e; - } - } - return null; - } - - async function execute( - name: string, - options: TxOptions, - methodName: string, - ...args: any[] - ): Promise { - options = { ...options }; // ensure no change - await init(); - const { - address: from, - ethersSigner, - hardwareWallet, - unknown, - } = await getFrom(options.from); - - let tx; - const deployment = await partialExtension.get(name); - const abi = deployment.abi; - const overrides = { - gasLimit: options.gasLimit, - gasPrice: options.gasPrice ? BigNumber.from(options.gasPrice) : undefined, // TODO cinfig - maxFeePerGas: options.maxFeePerGas - ? BigNumber.from(options.maxFeePerGas) - : undefined, - maxPriorityFeePerGas: options.maxPriorityFeePerGas - ? BigNumber.from(options.maxPriorityFeePerGas) - : undefined, - value: options.value ? BigNumber.from(options.value) : undefined, - nonce: options.nonce, - }; - - const ethersContract = new Contract(deployment.address, abi, ethersSigner); - if (!ethersContract.functions[methodName]) { - throw new Error( - `No method named "${methodName}" on contract deployed as "${name}"` - ); - } - - const numArguments = - ethersContract.interface.getFunction(methodName).inputs.length; - if (args.length !== numArguments) { - throw new Error( - `expected ${numArguments} arguments for method "${methodName}", got ${args.length}` - ); - } - - await overrideGasLimit(overrides, options, (newOverrides) => { - const ethersArgsWithGasLimit = args - ? args.concat([newOverrides]) - : [newOverrides]; - return ethersContract.estimateGas[methodName](...ethersArgsWithGasLimit); - }); - await setupGasPrice(overrides); - await setupNonce(from, overrides); - const ethersArgs = args ? args.concat([overrides]) : [overrides]; - - if (unknown) { - const ethersArgs = args ? args.concat([overrides]) : [overrides]; - const { data } = await ethersContract.populateTransaction[methodName]( - ...ethersArgs - ); - throw new UnknownSignerError({ - from, - to: deployment.address, - data, - value: options.value, - contract: { - name, - method: methodName, - args, - }, - }); - } - - if (options.log || hardwareWallet) { - print(`executing ${name}.${methodName}`); - if (hardwareWallet) { - print(` (please confirm on your ${hardwareWallet})`); - } - } - - if (network.tron) { - const method = ethersContract.interface.getFunction(methodName); - const methodParams = method.inputs.map((input) => input.type); - const funcSig = `${methodName}(${methodParams.join(',')})`; - const tronArgs = args.map((a, i) => ({ - type: methodParams[i], - value: a, - })); - tx = await handleSpecificErrors( - (ethersSigner.provider as TronWeb3Provider).triggerSmartContract( - from, - deployment.address, - funcSig, - tronArgs, - overrides - ) - ); - } else { - tx = await handleSpecificErrors( - ethersContract.functions[methodName](...ethersArgs) - ); - } - tx = await onPendingTx(tx); - - if (options.log || hardwareWallet) { - print(` (tx: ${tx.hash}) ...`); - } - - if (options.autoMine) { - try { - await provider.send('evm_mine', []); - } catch (e) {} - } - const receipt = await tx.wait(); - if (options.log || hardwareWallet) { - print(`: performed with ${receipt.gasUsed} gas\n`); - } - return receipt; - } - - // TODO ? - // async function rawCall(to: string, data: string) { - // // TODO call it eth_call? - // await init(); - // return provider.send("eth_call", [ - // { - // to, - // data - // }, - // "latest" - // ]); // TODO overrides - // } - - async function read( - name: string, - options: CallOptions | string, - methodName?: string | any, - ...args: unknown[] - ) { - if (typeof options === 'string') { - if (typeof methodName !== 'undefined') { - args.unshift(methodName); - } - methodName = options; - options = {}; - } - options = { ...options }; // ensure no change - await init(); - if (typeof args === 'undefined') { - args = []; - } - let caller: - | Web3Provider - | Signer - | zk.Web3Provider - | zk.Signer - | TronWeb3Provider - | TronSigner = provider; - const { ethersSigner } = await getOptionalFrom(options.from); - if (ethersSigner) { - caller = ethersSigner; - } - const deployment = await partialExtension.get(name); - if (!deployment) { - throw new Error(`no contract named "${name}"`); - } - const abi = deployment.abi; - const overrides: PayableOverrides = { - gasLimit: options.gasLimit, - gasPrice: options.gasPrice ? BigNumber.from(options.gasPrice) : undefined, // TODO cinfig - maxFeePerGas: options.maxFeePerGas - ? BigNumber.from(options.maxFeePerGas) - : undefined, - maxPriorityFeePerGas: options.maxPriorityFeePerGas - ? BigNumber.from(options.maxPriorityFeePerGas) - : undefined, - value: options.value ? BigNumber.from(options.value) : undefined, - nonce: options.nonce, - }; - cleanupOverrides(overrides); - const ethersContract = new Contract( - deployment.address, - abi, - caller as Signer - ); - // populate function - // if (options.outputTx) { - // const method = ethersContract.populateTransaction[methodName]; - // if (!method) { - // throw new Error( - // `no method named "${methodName}" on contract "${name}"` - // ); - // } - // if (args.length > 0) { - // return method(...args, overrides); - // } else { - // return method(overrides); - // } - // } - const method = ethersContract.callStatic[methodName]; - if (!method) { - throw new Error(`no method named "${methodName}" on contract "${name}"`); - } - if (args.length > 0) { - return method(...args, overrides); - } else { - return method(overrides); - } - } - async function getSigner(address: string): Promise { - await init(); - const { ethersSigner } = await getFrom(address); - return ethersSigner; - } - - const extension: DeploymentsExtension = { - ...partialExtension, - fetchIfDifferent, - deploy, // tron compatible - diamond: { - deploy: diamond, - }, - catchUnknownSigner, - execute, // tron compatible - rawTx, - read, // tron compatible - deterministic, // won't support tron (contracts addresses are dependent on timestamps) - getSigner, // tron compatible - }; - - const utils = { - dealWithPendingTransactions: async ( - pendingTxs: { - [txHash: string]: { - name: string; - deployment?: any; - rawTx: string; - decoded: { - from: string; - gasPrice?: string; - maxFeePerGas?: string | BigNumber; - maxPriorityFeePerGas?: string | BigNumber; - gasLimit: string; - to: string; - value: string; - nonce: number; - data: string; - r: string; - s: string; - v: number; - // creates: tx.creates, // TODO test - chainId: number; - }; - }; - }, - pendingTxPath: string, - globalGasPrice: string | undefined - ) => { - await init(); - const txHashes = Object.keys(pendingTxs); - for (const txHash of txHashes) { - let tx: Transaction | undefined; - const txData = pendingTxs[txHash]; - if (txData.rawTx || txData.decoded) { - if (txData.rawTx) { - tx = parseTransaction(txData.rawTx); - } else { - tx = recode(txData.decoded); - } - // alternative add options to deploy task to delete pending tx, combined with --gasprice this would work (except for timing edge case) - } else { - console.error(`no access to raw data for tx ${txHash}`); - } - - const txFromPeers = await network.provider.send( - 'eth_getTransactionByHash', - [txHash] - ); - - let feeHistory: - | { - baseFeePerGas: string[]; - gasUsedRatio?: number[]; // not documented on https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=false&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false - oldestBlock: number; - reward: string[][]; - } - | undefined = undefined; - let newGasPriceS = globalGasPrice; - if (!newGasPriceS) { - newGasPriceS = await network.provider.send('eth_gasPrice', []); - try { - feeHistory = await network.provider.send('eth_feeHistory', [ - 4, - 'latest', - [25, 75], - ]); - } catch (e) {} - } - const newGasPrice = BigNumber.from(newGasPriceS); - - let newBaseFee: BigNumber | undefined = undefined; - if (feeHistory) { - newBaseFee = BigNumber.from( - feeHistory.baseFeePerGas[feeHistory.baseFeePerGas.length - 1] - ); - } - - const choices = ['skip (forget tx)']; - if (!txFromPeers) { - if (tx) { - choices.unshift('broadcast again'); - } - console.log(`transaction ${txHash} cannot be found among peers`); - } else { - choices.unshift('continue waiting'); - if (tx) { - console.log( - `transaction ${txHash} still pending... It used a gas pricing config of ${ - tx.gasPrice - ? `(gasPrice: ${tx.gasPrice.toString()} wei)` - : tx.maxPriorityFeePerGas || tx.maxPriorityFeePerGas - ? `maxPriorityFeePerGas: ${tx.maxPriorityFeePerGas?.toString()} maxFeePerGas: ${tx.maxFeePerGas?.toString()}` - : `` - } , - current gas price is ${newGasPrice.toString()} wei - ${newBaseFee ? `new baseFee is ${newBaseFee.toString()}` : ''} - ` - ); - } else { - console.log(`transaction ${txHash} still pending...`); - } - } - - if (tx && tx.gasPrice && tx.gasPrice.lt(newGasPrice)) { - choices.unshift('increase gas'); - } else if (tx && (tx.maxFeePerGas || tx.maxPriorityFeePerGas)) { - // choices.unshift(); // TODO - // console.log('TODO handle EIP1559 gas pricing increase'); - choices.unshift('increase gas'); - } - - const prompt = new (enquirer as any).Select({ - name: 'action', - message: 'Choose what to do with the pending transaction:', - choices, - }); - - const answer = await prompt.run(); - let txHashToWait: string | undefined; - if (answer !== 'skip (forget tx)') { - if (answer === 'continue waiting') { - console.log('waiting for transaction...'); - txHashToWait = txHash; - } else if (answer === 'broadcast again') { - if (!tx) { - throw new Error(`cannot resubmit a tx if info not available`); - } - - if (txData.rawTx) { - const tx = (await handleSpecificErrors( - provider.sendTransaction(txData.rawTx) - )) as TransactionResponse; - txHashToWait = tx.hash; - if (tx.hash !== txHash) { - console.error('non mathcing tx hashes after resubmitting...'); - } - console.log('waiting for newly broadcasted tx ...'); - } else { - console.log('resigning the tx...'); - const { ethersSigner, hardwareWallet } = await getOptionalFrom( - tx.from - ); - if (!ethersSigner) { - throw new Error('no signer for ' + tx.from); - } - - if (hardwareWallet) { - print(` (please confirm on your ${hardwareWallet})`); - } - - const txReq = await handleSpecificErrors( - ethersSigner.sendTransaction( - cleanupOverrides({ - to: tx.to, - from: tx.from, - nonce: tx.nonce, - - gasLimit: tx.gasLimit, - gasPrice: tx.gasPrice, - maxFeePerGas: tx.maxFeePerGas, - maxPriorityFeePerGas: tx.maxPriorityFeePerGas, - - data: tx.data, - value: tx.value, - chainId: tx.chainId, - type: tx.type === null ? undefined : tx.type, - accessList: tx.accessList, - }) - ) - ); - txHashToWait = txReq.hash; - if (txReq.hash !== txHash) { - delete pendingTxs[txHash]; - if (Object.keys(pendingTxs).length === 0) { - fs.removeSync(pendingTxPath); - } else { - fs.writeFileSync( - pendingTxPath, - JSON.stringify(pendingTxs, bnReplacer, ' ') - ); - } - await onPendingTx(txReq); - console.error('non mathcing tx hashes after resubmitting...'); - } - } - } else if (answer === 'increase gas') { - if (!tx) { - throw new Error(`cannot resubmit a tx if info not available`); - } - const { ethersSigner, hardwareWallet } = await getOptionalFrom( - tx.from - ); - if (!ethersSigner) { - throw new Error('no signer for ' + tx.from); - } - - if (hardwareWallet) { - print(` (please confirm on your ${hardwareWallet})`); - } - - const gasPriceSetup = await getGasPrice(); - const maxFeePerGas = gasPriceSetup.maxFeePerGas; - const maxPriorityFeePerGas = gasPriceSetup.maxPriorityFeePerGas; - let gasPrice: BigNumber | undefined; - if (!maxFeePerGas && !maxPriorityFeePerGas) { - gasPrice = gasPriceSetup.gasPrice; - if (gasPrice) { - console.log('using legacy gasPrice with gasprice passed in'); - } - } - // if (!gasPrice && !maxFeePerGas && !maxPriorityFeePerGas) { - // console.log('using legacy gasPrice, TODO handle auto pricing') - // gasPrice = newGasPrice; - // } - - const txReq = await handleSpecificErrors( - ethersSigner.sendTransaction( - cleanupOverrides({ - to: tx.to, - from: tx.from, - nonce: tx.nonce, - - gasLimit: tx.gasLimit, - gasPrice, - maxFeePerGas, - maxPriorityFeePerGas, - - data: tx.data, - value: tx.value, - chainId: tx.chainId, - type: tx.type === null ? undefined : tx.type, - accessList: tx.accessList, - }) - ) - ); - txHashToWait = txReq.hash; - delete pendingTxs[txHash]; - if (Object.keys(pendingTxs).length === 0) { - fs.removeSync(pendingTxPath); - } else { - fs.writeFileSync( - pendingTxPath, - JSON.stringify(pendingTxs, bnReplacer, ' ') - ); - } - await onPendingTx(txReq); - console.log(`new transaction submitted, waiting... ${txReq.hash}`); - } - } - - if (txHashToWait) { - const receipt = await waitForTx( - network.provider, - txHashToWait, - false - ); - if ( - (!receipt.status || receipt.status == 1) && // ensure we do not save failed deployment - receipt.contractAddress && - txData.name - ) { - await saveDeployment(txData.name, { - ...txData.deployment, - receipt, - }); - } - } - - delete pendingTxs[txHash]; - if (Object.keys(pendingTxs).length === 0) { - fs.removeSync(pendingTxPath); - } else { - fs.writeFileSync( - pendingTxPath, - JSON.stringify(pendingTxs, bnReplacer, ' ') - ); - } - } - }, - }; - - // ////////// Backward compatible for transition: ////////////////// - (extension as any).call = ( - options: any, - name: string, - methodName: string, - ...args: any[] - ): Promise => { - if (typeof options === 'string') { - args = args || []; - if (methodName !== undefined) { - args.unshift(methodName); - } - methodName = name; - name = options; - options = {}; - } - return read(name, options, methodName, ...args); - }; - - (extension as any).sendTxAndWait = ( - options: TxOptions, - name: string, - methodName: string, - ...args: any[] - ): Promise => { - return execute(name, options, methodName, ...args); - }; - - (extension as any).deployIfDifferent = ( - name: string, - options: DeployOptions, - contractName: string, - ...args: any[] - ): Promise => { - options.contract = contractName; - options.args = args; - return deploy(name, options); - }; - // //////////////////////////////////////////////////////////////////// - - async function _old_deployViaDiamondProxy( - name: string, - options: DiamondOptions - ): Promise { - if (options.log) { - log(`handling old diamond ${name} ...`); - } - const oldDeployment = await getDeploymentOrNUll(name); - let proxy: Deployment | undefined; - const deployResult = _checkUpgradeIndex( - oldDeployment, - options.upgradeIndex - ); - if (deployResult) { - return deployResult; - } - - if (options.deterministicSalt) { - throw new Error(`old diamonds do not support determinsitc deployment`); - // need to compute the resulting address accurately - } - - const proxyName = name + '_DiamondProxy'; - const { address: owner } = await getDiamondOwner(options); - const newSelectors: string[] = []; - const facetSnapshot: Facet[] = []; - const oldFacets: Facet[] = []; - const selectorToNotTouch: { [selector: string]: boolean } = {}; - for (const selector of [ - '0xcdffacc6', - '0x52ef6b2c', - '0xadfca15e', - '0x7a0ed627', - '0x01ffc9a7', - '0x1f931c1c', - '0xf2fde38b', - '0x8da5cb5b', - ]) { - selectorToNotTouch[selector] = true; - } - if (oldDeployment) { - proxy = await getDeployment(proxyName); - const diamondProxy = new Contract(proxy.address, proxy.abi, provider); - - const currentFacets: Facet[] = await diamondProxy.facets(); - for (const currentFacet of currentFacets) { - oldFacets.push(currentFacet); - - // ensure DiamondLoupeFacet, OwnershipFacet and DiamondCutFacet are kept // TODO options to delete cut them out? - if ( - findAll( - [ - '0xcdffacc6', - '0x52ef6b2c', - '0xadfca15e', - '0x7a0ed627', - '0x01ffc9a7', - ], - currentFacet.functionSelectors - ) || // Loupe - currentFacet.functionSelectors[0] === '0x1f931c1c' || // DiamoncCut - findAll(['0xf2fde38b', '0x8da5cb5b'], currentFacet.functionSelectors) // ERC173 - ) { - facetSnapshot.push(currentFacet); - newSelectors.push(...currentFacet.functionSelectors); - } - } - } else { - throw new Error(`old diamond deployments are now disabled`); - } - // console.log({ oldFacets: JSON.stringify(oldFacets, bnReplacer, " ") }); - - let changesDetected = !oldDeployment; - let abi: any[] = oldDiamonBase.abi.concat([]); - const facetCuts: FacetCut[] = []; - for (const facet of options.facets) { - let facetName; - let artifact; - let linkedData = options.linkedData; - let libraries = options.libraries; - let facetArgs = options.facetsArgs; - let argsSpecific = false; - if (typeof facet === 'string') { - artifact = await partialExtension.getExtendedArtifact(facet); - facetName = facet; - } else { - if (facet.linkedData) { - linkedData = facet.linkedData; - } - if (facet.libraries) { - libraries = facet.libraries; - } - if (facet.args) { - facetArgs = facet.args; - argsSpecific = true; - } - if (facet.contract) { - if (typeof facet.contract === 'string') { - artifact = await partialExtension.getExtendedArtifact( - facet.contract - ); - } else { - artifact = facet.contract; - } - } else { - if (!facet.name) { - throw new Error( - `no name , not contract is specified for facet, cannot proceed` - ); - } - artifact = await partialExtension.getExtendedArtifact(facet.name); - } - - facetName = facet.name; - if (!facetName) { - if (typeof facet.contract === 'string') { - facetName = name + '_facet_' + facet.contract; - } else { - throw new Error(`facet has no name, please specify one`); - } - } - } - const constructor = artifact.abi.find( - (fragment: { type: string; inputs: any[] }) => - fragment.type === 'constructor' - ); - if ((!argsSpecific && !constructor) || constructor.inputs.length === 0) { - // reset args for case where facet do not expect any and there was no specific args set on it - facetArgs = []; - } - abi = mergeABIs([abi, artifact.abi], { - check: true, - skipSupportsInterface: false, - }); - // TODO allow facet to be named so multiple version could coexist - const implementation = await _deployOne(facetName, { - contract: artifact, - from: options.from, - autoMine: options.autoMine, - estimateGasExtra: options.estimateGasExtra, - estimatedGasLimit: options.estimatedGasLimit, - gasPrice: options.gasPrice, - maxFeePerGas: options.maxFeePerGas, - maxPriorityFeePerGas: options.maxPriorityFeePerGas, - log: options.log, - // deterministicDeployment: options.deterministicDeployment, // todo ? - libraries, - linkedData, - args: facetArgs, - }); - if (implementation.newlyDeployed) { - // console.log(`facet ${facet} deployed at ${implementation.address}`); - const newFacet = { - facetAddress: implementation.address, - functionSelectors: sigsFromABI(implementation.abi), - }; - facetSnapshot.push(newFacet); - newSelectors.push(...newFacet.functionSelectors); - } else { - const oldImpl = await getDeployment(facetName); - const newFacet = { - facetAddress: oldImpl.address, - functionSelectors: sigsFromABI(oldImpl.abi), - }; - facetSnapshot.push(newFacet); - newSelectors.push(...newFacet.functionSelectors); - } - } - - const oldSelectors: string[] = []; - const oldSelectorsFacetAddress: { [selector: string]: string } = {}; - for (const oldFacet of oldFacets) { - for (const selector of oldFacet.functionSelectors) { - oldSelectors.push(selector); - oldSelectorsFacetAddress[selector] = oldFacet.facetAddress; - } - } - - for (const newFacet of facetSnapshot) { - const selectorsToAdd: string[] = []; - const selectorsToReplace: string[] = []; - - for (const selector of newFacet.functionSelectors) { - if (oldSelectors.indexOf(selector) > 0) { - if ( - oldSelectorsFacetAddress[selector].toLowerCase() !== - newFacet.facetAddress.toLowerCase() && - !selectorToNotTouch[selector] - ) { - selectorsToReplace.push(selector); - } - } else { - if (!selectorToNotTouch[selector]) { - selectorsToAdd.push(selector); - } - } - } - - if (selectorsToReplace.length > 0) { - changesDetected = true; - facetCuts.push({ - facetAddress: newFacet.facetAddress, - functionSelectors: selectorsToReplace, - action: FacetCutAction.Replace, - }); - } - - if (selectorsToAdd.length > 0) { - changesDetected = true; - facetCuts.push({ - facetAddress: newFacet.facetAddress, - functionSelectors: selectorsToAdd, - action: FacetCutAction.Add, - }); - } - } - - const selectorsToDelete: string[] = []; - for (const selector of oldSelectors) { - if (newSelectors.indexOf(selector) === -1) { - selectorsToDelete.push(selector); - } - } - - if (selectorsToDelete.length > 0) { - changesDetected = true; - facetCuts.unshift({ - facetAddress: '0x0000000000000000000000000000000000000000', - functionSelectors: selectorsToDelete, - action: FacetCutAction.Remove, - }); - } - - let data = '0x'; - if (options.execute) { - const diamondContract = new Contract( - '0x0000000000000000000000000000000000000001', - abi - ); - const txData = await diamondContract.populateTransaction[ - options.execute.methodName - ](...options.execute.args); - data = txData.data || '0x'; - } - - if (changesDetected) { - if (!proxy) { - throw new Error( - `no proxy found: old diamond deployments are now disabled` - ); - } else { - const currentOwner = await read(proxyName, 'owner'); - if (currentOwner.toLowerCase() !== owner.toLowerCase()) { - throw new Error( - 'To change owner, you need to call `transferOwnership`' - ); - } - if (currentOwner === AddressZero) { - throw new Error( - 'The Diamond belongs to no-one. It cannot be upgraded anymore' - ); - } - - const executeReceipt = await execute( - name, - { ...options, from: currentOwner }, - 'diamondCut', - facetCuts, - data === '0x' - ? '0x0000000000000000000000000000000000000000' - : proxy.address, - data - ); - if (!executeReceipt) { - throw new Error('failed to execute'); - } - - const diamondDeployment: DeploymentSubmission = { - ...oldDeployment, - linkedData: options.linkedData, - address: proxy.address, - abi, - facets: facetSnapshot, - execute: options.execute, // TODO add receipt + tx hash - }; - - // TODO reenable history with options - if (oldDeployment.history) { - diamondDeployment.history = diamondDeployment.history - ? diamondDeployment.history.concat([oldDeployment]) - : [oldDeployment]; - } - - await saveDeployment(name, diamondDeployment); - } - - const deployment = await partialExtension.get(name); - return { - ...deployment, - newlyDeployed: true, - }; - } else { - const deployment = await partialExtension.get(name); - return { - ...deployment, - newlyDeployed: false, - }; - } - } - - return { extension, utils }; -} - -function pause(duration: number): Promise { - return new Promise((res) => setTimeout(res, duration * 1000)); -} - -export async function waitForTx( - ethereum: EthereumProvider, - txHash: string, - isContract: boolean -): Promise { - let receipt; - // eslint-disable-next-line no-constant-condition - while (true) { - try { - receipt = await ethereum.send('eth_getTransactionReceipt', [txHash]); - } catch (e) {} - if (receipt && receipt.blockNumber) { - if (isContract) { - if (!receipt.contractAddress) { - throw new Error('contract not deployed'); - } else { - return receipt; - } - } else { - return receipt; - } - } - await pause(2); - } -} - -function replaceTemplateArgs( - proxyArgsTemplate: string[], - { - implementationAddress, - proxyAdmin, - data, - proxyAddress, - }: { - implementationAddress: string; - proxyAdmin: string; - data: string; - proxyAddress?: string; - } -): any[] { - const proxyArgs: any[] = []; - for (let i = 0; i < proxyArgsTemplate.length; i++) { - const argValue = proxyArgsTemplate[i]; - if (argValue === '{implementation}') { - proxyArgs.push(implementationAddress); - } else if (argValue === '{admin}') { - proxyArgs.push(proxyAdmin); - } else if (argValue === '{data}') { - proxyArgs.push(data); - } else if (argValue === '{proxy}') { - if (!proxyAddress) { - throw new Error(`Expected proxy address but none was specified.`); - } - proxyArgs.push(proxyAddress); - } else { - proxyArgs.push(argValue); - } - } - - return proxyArgs; -} diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 5cc821e..0000000 --- a/src/index.ts +++ /dev/null @@ -1,1120 +0,0 @@ -import './type-extensions'; -import './tasks/compile'; -import './tasks/audit'; -import path from 'path'; -import fs from 'fs-extra'; -import murmur128 from 'murmur-128'; -import { - HardhatRuntimeEnvironment, - HardhatConfig, - HardhatUserConfig, - EthereumProvider, - Artifact, - BuildInfo, - NetworkConfig, -} from 'hardhat/types'; -import { createProvider } from 'hardhat/internal/core/providers/construction'; // TODO harhdat argument types not from internal -import { LazyInitializationProviderAdapter } from 'hardhat/internal/core/providers/lazy-initialization'; -import { Deployment, ExtendedArtifact } from '../types'; -import { extendEnvironment, task, subtask, extendConfig } from 'hardhat/config'; -import { HARDHAT_NETWORK_NAME, HardhatPluginError } from 'hardhat/plugins'; -import * as types from 'hardhat/internal/core/params/argumentTypes'; // TODO harhdat argument types not from internal -import { - TASK_NODE, - TASK_TEST, - TASK_NODE_GET_PROVIDER, - TASK_NODE_SERVER_READY, - TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD, -} from 'hardhat/builtin-tasks/task-names'; -import { lazyObject } from 'hardhat/plugins'; -import { loadTronSolc } from './tron/solc'; - -import debug from 'debug'; -const log = debug('hardhat:sun-protocol:tron-studio'); - -import { DeploymentsManager } from './DeploymentsManager'; -import chokidar from 'chokidar'; -import { submitSources } from './etherscan'; -import { submitSourcesToSourcify } from './sourcify'; -import { Network } from 'hardhat/types/runtime'; -import { store } from './globalStore'; -import { getDeployPaths, getNetworkName } from './utils'; - -export { getNetworkName }; - -export const TASK_DEPLOY = 'deploy'; -export const TASK_DEPLOY_MAIN = 'deploy:main'; -export const TASK_DEPLOY_RUN_DEPLOY = 'deploy:runDeploy'; -export const TASK_EXPORT = 'export'; -export const TASK_ETHERSCAN_VERIFY = 'etherscan-verify'; -export const TASK_SOURCIFY = 'sourcify'; -// need to reexport all hardhat types. Sometimes intellisense will not correctly take into account the augmented interfaces set in type-extensions.ts -// even if this plug-in is correctly imported. -// importing the hardhat types from this package rather than hardhat is a workaround that issue. -export * from 'hardhat/types'; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -let nodeTaskArgs: Record = {}; - -function isHardhatEVM(hre: HardhatRuntimeEnvironment): boolean { - const { network } = hre; - return network.name === HARDHAT_NETWORK_NAME; -} - -function normalizePathArray(config: HardhatConfig, paths: string[]): string[] { - const newArray: string[] = []; - for (const value of paths) { - if (value) { - newArray.push(normalizePath(config, value, value)); - } - } - return newArray; -} - -function normalizePath( - config: HardhatConfig, - userPath: string | undefined, - defaultPath: string -): string { - if (userPath === undefined) { - userPath = path.join(config.paths.root, defaultPath); - } else { - if (!path.isAbsolute(userPath)) { - userPath = path.normalize(path.join(config.paths.root, userPath)); - } - } - return userPath; -} - -extendConfig( - (config: HardhatConfig, userConfig: Readonly) => { - config.paths.deployments = normalizePath( - config, - userConfig.paths?.deployments, - 'deployments' - ); - - config.paths.imports = normalizePath( - config, - userConfig.paths?.imports, - 'imports' - ); - - if (userConfig.paths?.deploy) { - let deployPaths = []; - if (typeof userConfig.paths.deploy === 'string') { - deployPaths = [userConfig.paths.deploy]; - } else { - deployPaths = userConfig.paths.deploy; - } - config.paths.deploy = deployPaths.map((p) => - normalizePath(config, p, 'deploy') - ); - } else { - config.paths.deploy = [normalizePath(config, undefined, 'deploy')]; - } - - if (userConfig.namedAccounts) { - config.namedAccounts = userConfig.namedAccounts; - } else { - config.namedAccounts = { default: { default: 0 } }; - } - - config.deterministicDeployment = userConfig.deterministicDeployment; - - if (userConfig.external) { - if (!config.external) { - config.external = {}; - } - if (userConfig.external.contracts) { - const externalContracts: { artifacts: string[]; deploy?: string }[] = - []; - config.external.contracts = externalContracts; - for (const userDefinedExternalContracts of userConfig.external - .contracts) { - const userArtifacts = - typeof userDefinedExternalContracts.artifacts === 'string' - ? [userDefinedExternalContracts.artifacts] - : userDefinedExternalContracts.artifacts; - externalContracts.push({ - artifacts: userArtifacts.map((v) => normalizePath(config, v, v)), - deploy: userDefinedExternalContracts.deploy - ? normalizePath( - config, - userDefinedExternalContracts.deploy, - userDefinedExternalContracts.deploy - ) - : undefined, - }); - } - } - if (userConfig.external.deployments) { - config.external.deployments = {}; - for (const key of Object.keys(userConfig.external.deployments)) { - config.external.deployments[key] = normalizePathArray( - config, - userConfig.external.deployments[key] - ); - } - } - } - - for (const compiler of config.solidity.compilers) { - setupExtraSolcSettings(compiler.settings); - } - - const defaultConfig = {}; - if (userConfig.verify !== undefined) { - const customConfig = userConfig.verify; - config.verify = { ...defaultConfig, ...customConfig }; - } else { - config.verify = defaultConfig; - // backward compatibility for runtime (js) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - if ((userConfig as any).etherscan) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - config.verify.etherscan = (userConfig as any).etherscan; - } - } - } -); - -function createNetworkFromConfig( - env: HardhatRuntimeEnvironment, - networkName: string, - config: NetworkConfig -): Network { - const tags: { [tag: string]: boolean } = {}; - const tagsCollected = config.tags || []; - for (const tag of tagsCollected) { - tags[tag] = true; - } - - const network = { - name: networkName, - config, - live: config.live, - saveDeployments: config.saveDeployments, - zksync: config.zksync, - tron: config.tron, - tags, - deploy: config.deploy || env.config.paths.deploy, - companionNetworks: {}, - }; - networkFromConfig(env, network as Network, false); - return network as Network; -} - -function networkFromConfig( - env: HardhatRuntimeEnvironment, - network: Network, - companion: boolean -) { - let live = true; - const networkName = network.name; // cannot use fork here as this could be set via task, T - if (networkName === 'localhost' || networkName === 'hardhat') { - // the 2 default network are not live network - live = false; - } - if (network.config.live !== undefined) { - live = network.config.live; - } - - if (network.config.verify !== undefined) { - network.verify = network.config.verify; - } else { - // backward compatibility for runtime (js) - // eslint-disable-next-line @typescript-eslint/no-explicit-any - if ((network.config as any).etherscan) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - network.verify = { etherscan: (network.config as any).etherscan }; - } - } - - if (network.config.zksync !== undefined) { - network.zksync = network.config.zksync; - } - - if (network.config.tron !== undefined) { - network.tron = network.config.tron; - } - - // associate tags to current network as object - network.tags = {}; - const tags = network.config.tags || []; - for (const tag of tags) { - network.tags[tag] = true; - } - - if (network.config.deploy) { - network.deploy = network.config.deploy; - } else { - network.deploy = env.config.paths.deploy; - } - - if (companion && network.config.companionNetworks) { - network.companionNetworks = network.config.companionNetworks; - } else { - network.companionNetworks = {}; - } - - if (network.config.live !== undefined) { - live = network.config.live; - } - - network.live = live; - - if (network.config.saveDeployments === undefined) { - network.saveDeployments = true; - } else { - network.saveDeployments = network.config.saveDeployments; - } - - let autoImpersonate = false; - - if (networkName === 'hardhat') { - autoImpersonate = true; - } - - if (network.config.autoImpersonate !== undefined) { - autoImpersonate = network.config.autoImpersonate; - } - - network.autoImpersonate = autoImpersonate; -} - -log('start...'); -let deploymentsManager: DeploymentsManager; -extendEnvironment((env) => { - networkFromConfig(env, env.network, true); - if (deploymentsManager === undefined || env.deployments === undefined) { - deploymentsManager = new DeploymentsManager( - env, - lazyObject(() => env.network) // IMPORTANT, else other plugin cannot set env.network before end, like solidity-coverage does here in the coverage task : https://github.com/sc-forks/solidity-coverage/blob/3c0f3a5c7db26e82974873bbf61cf462072a7c6d/plugins/resources/nomiclabs.utils.js#L93-L98 - ); - env.deployments = deploymentsManager.deploymentsExtension; - env.getNamedAccounts = - deploymentsManager.getNamedAccounts.bind(deploymentsManager); - env.getUnnamedAccounts = - deploymentsManager.getUnnamedAccounts.bind(deploymentsManager); - env.getChainId = () => { - return deploymentsManager.getChainId(); - }; - - for (const networkName of Object.keys(env.config.networks)) { - const config = env.config.networks[networkName]; - if (!('url' in config) || networkName === 'hardhat') { - continue; - } - store.networks[networkName] = createNetworkFromConfig( - env, - networkName, - config - ); - } - } - initCompanionNetworks(env); - log('ready'); -}); - -function addIfNotPresent(array: string[], value: string) { - if (array.indexOf(value) === -1) { - array.push(value); - } -} - -function setupExtraSolcSettings(settings: { - metadata: { useLiteralContent: boolean }; - outputSelection: { '*': { '': string[]; '*': string[] } }; -}): void { - settings.metadata = settings.metadata || {}; - settings.metadata.useLiteralContent = true; - - if (settings.outputSelection === undefined) { - settings.outputSelection = { - '*': { - '*': [], - '': [], - }, - }; - } - if (settings.outputSelection['*'] === undefined) { - settings.outputSelection['*'] = { - '*': [], - '': [], - }; - } - if (settings.outputSelection['*']['*'] === undefined) { - settings.outputSelection['*']['*'] = []; - } - if (settings.outputSelection['*'][''] === undefined) { - settings.outputSelection['*'][''] = []; - } - - addIfNotPresent(settings.outputSelection['*']['*'], 'abi'); - addIfNotPresent(settings.outputSelection['*']['*'], 'evm.bytecode'); - addIfNotPresent(settings.outputSelection['*']['*'], 'evm.deployedBytecode'); - addIfNotPresent(settings.outputSelection['*']['*'], 'metadata'); - addIfNotPresent(settings.outputSelection['*']['*'], 'devdoc'); - addIfNotPresent(settings.outputSelection['*']['*'], 'userdoc'); - addIfNotPresent(settings.outputSelection['*']['*'], 'storageLayout'); - addIfNotPresent(settings.outputSelection['*']['*'], 'evm.methodIdentifiers'); - addIfNotPresent(settings.outputSelection['*']['*'], 'evm.gasEstimates'); - // addIfNotPresent(settings.outputSelection['*'][''], 'ir'); - // addIfNotPresent(settings.outputSelection['*'][''], 'irOptimized'); - // addIfNotPresent(settings.outputSelection['*'][''], 'ast'); -} - -function initCompanionNetworks(hre: HardhatRuntimeEnvironment) { - hre.companionNetworks = {}; - for (const name of Object.keys(hre.network.companionNetworks)) { - const networkName = hre.network.companionNetworks[name]; - // TODO Fork case ? - if (networkName === hre.network.name) { - deploymentsManager.addCompanionManager(name, deploymentsManager); - const extraNetwork = { - deployments: deploymentsManager.deploymentsExtension, - getNamedAccounts: () => deploymentsManager.getNamedAccounts(), - getUnnamedAccounts: () => deploymentsManager.getUnnamedAccounts(), - getChainId: () => deploymentsManager.getChainId(), - provider: lazyObject(() => hre.network.provider), - }; - hre.companionNetworks[name] = extraNetwork; - continue; - } - const config = hre.config.networks[networkName]; - if (!('url' in config) || networkName === 'hardhat') { - throw new Error( - `in memory network like hardhat are not supported as companion network` - ); - } - - const network = store.networks[networkName]; - if (!network) { - throw new Error(`no network named ${networkName}`); - } - - network.provider = new LazyInitializationProviderAdapter(() => { - return createProvider(hre.config, networkName, hre.artifacts); - }); - - const networkDeploymentsManager = new DeploymentsManager(hre, network); - deploymentsManager.addCompanionManager(name, networkDeploymentsManager); - const extraNetwork = { - deployments: networkDeploymentsManager.deploymentsExtension, - getNamedAccounts: () => networkDeploymentsManager.getNamedAccounts(), - getUnnamedAccounts: () => networkDeploymentsManager.getUnnamedAccounts(), - getChainId: () => networkDeploymentsManager.getChainId(), - provider: network.provider, - }; - hre.companionNetworks[name] = extraNetwork; - } -} - -subtask(TASK_DEPLOY_RUN_DEPLOY, 'deploy run only') - .addOptionalParam('export', 'export current network deployments') - .addOptionalParam('exportAll', 'export all deployments into one file') - .addOptionalParam( - 'tags', - 'specify which deploy script to execute via tags, separated by commas', - undefined, - types.string - ) - .addFlag( - 'tagsRequireAll', - 'execute only deploy scripts containing all the tags specified' - ) - .addOptionalParam( - 'write', - 'whether to write deployments to file', - true, - types.boolean - ) - .addOptionalParam( - 'pendingtx', - 'whether to save pending tx', - false, - types.boolean - ) - .addOptionalParam( - 'gasprice', - 'gas price to use for transactions', - undefined, - types.string - ) - .addOptionalParam('maxfee', 'max fee per gas', undefined, types.string) - .addOptionalParam( - 'priorityfee', - 'max priority fee per gas', - undefined, - types.string - ) - .addFlag('reset', 'whether to delete deployments files first') - .addFlag('log', 'whether to output log') - .addFlag('reportGas', 'report gas use') - .setAction(async (args, hre) => { - let tags = args.tags; - if (typeof tags === 'string') { - tags = tags.split(','); - } - await deploymentsManager.runDeploy(tags, { - log: args.log, - resetMemory: false, - deletePreviousDeployments: args.reset, - writeDeploymentsToFiles: args.write, - export: args.export || process.env.HARDHAT_DEPLOY_EXPORT, - exportAll: args.exportAll || process.env.HARDHAT_DEPLOY_EXPORT_ALL, - savePendingTx: args.pendingtx, - gasPrice: args.gasprice, - maxFeePerGas: args.maxfee, - maxPriorityFeePerGas: args.priorityfee, - tagsRequireAll: args.tagsRequireAll, - }); - if (args.reportGas) { - console.log(`total gas used: ${hre.deployments.getGasUsed()}`); - } - }); - -subtask(TASK_DEPLOY_MAIN, 'deploy') - .addOptionalParam('export', 'export current network deployments') - .addOptionalParam('exportAll', 'export all deployments into one file') - .addOptionalParam( - 'tags', - 'specify which deploy script to execute via tags, separated by commas', - undefined, - types.string - ) - .addFlag( - 'tagsRequireAll', - 'execute only deploy scripts containing all the tags specified' - ) - .addOptionalParam( - 'write', - 'whether to write deployments to file', - true, - types.boolean - ) - .addOptionalParam( - 'pendingtx', - 'whether to save pending tx', - false, - types.boolean - ) - .addOptionalParam( - 'gasprice', - 'gas price to use for transactions', - undefined, - types.string - ) - .addOptionalParam('maxfee', 'max fee per gas', undefined, types.string) - .addOptionalParam( - 'priorityfee', - 'max priority fee per gas', - undefined, - types.string - ) - .addFlag('noCompile', 'disable pre compilation') - .addFlag('reset', 'whether to delete deployments files first') - .addFlag('log', 'whether to output log') - .addFlag('watch', 'redeploy on every change of contract or deploy script') - .addFlag( - 'watchOnly', - 'do not actually deploy, just watch and deploy if changes occurs' - ) - .addFlag('reportGas', 'report gas use') - .setAction(async (args, hre) => { - if (args.reset) { - await deploymentsManager.deletePreviousDeployments( - args.runAsNode ? 'localhost' : undefined - ); - } - - async function compileAndDeploy() { - if (!args.noCompile) { - await hre.run('compile'); - } - return hre.run(TASK_DEPLOY_RUN_DEPLOY, { ...args, reset: false }); - } - - let currentPromise: Promise<{ - [name: string]: Deployment; - }> | null = args.watchOnly ? null : compileAndDeploy(); - if (args.watch || args.watchOnly) { - const deployPaths = getDeployPaths(hre.network); - const watcher = chokidar.watch( - [hre.config.paths.sources, ...deployPaths], - { - ignored: /(^|[/\\])\../, // ignore dotfiles - persistent: true, - } - ); - - watcher.on('ready', () => - console.log('Initial scan complete. Ready for changes') - ); - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let rejectPending: any = null; - // eslint-disable-next-line no-inner-declarations,@typescript-eslint/no-explicit-any - function pending(): Promise { - return new Promise((resolve, reject) => { - rejectPending = reject; - if (currentPromise) { - currentPromise - .then(() => { - rejectPending = null; - resolve(); - }) - .catch((error) => { - rejectPending = null; - currentPromise = null; - console.error(error); - }); - } else { - rejectPending = null; - resolve(); - } - }); - } - watcher.on('change', async () => { - console.log('change detected'); - if (currentPromise) { - console.log('deployment in progress, please wait ...'); - if (rejectPending) { - // console.log("disabling previously pending redeployments..."); - rejectPending(); - } - try { - // console.log("waiting for current redeployment..."); - await pending(); - // console.log("pending finished"); - } catch (e) { - return; - } - } - currentPromise = compileAndDeploy(); - try { - await currentPromise; - } catch (e) { - console.error(e); - } - currentPromise = null; - }); - try { - await currentPromise; - } catch (e) { - console.error(e); - } - currentPromise = null; - await new Promise((resolve) => setTimeout(resolve, 2000000000)); // TODO better way ? - } else { - const firstDeployments = await currentPromise; - return firstDeployments; - } - }); - -task(TASK_TEST, 'Runs mocha tests') - .addFlag('deployFixture', 'run the global fixture before tests') - .addFlag('noImpersonation', 'do not impersonate unknown accounts') - .setAction(async (args, hre, runSuper) => { - if (args.noImpersonation) { - deploymentsManager.disableAutomaticImpersonation(); - } - if (args.deployFixture || process.env.HARDHAT_DEPLOY_FIXTURE) { - if (!args.noCompile) { - await hre.run('compile'); - } - await hre.deployments.fixture(undefined, { - keepExistingDeployments: true, // by default reuse the existing deployments (useful for fork testing) - }); - return runSuper({ ...args, noCompile: true }); - } else { - return runSuper(args); - } - }); - -task(TASK_DEPLOY, 'Deploy contracts') - .addOptionalParam('export', 'export current network deployments') - .addOptionalParam('exportAll', 'export all deployments into one file') - .addOptionalParam( - 'tags', - 'specify which deploy script to execute via tags, separated by commas', - undefined, - types.string - ) - .addFlag( - 'tagsRequireAll', - 'execute only deploy scripts containing all the tags specified' - ) - .addOptionalParam( - 'write', - 'whether to write deployments to file', - undefined, - types.boolean - ) - // TODO pendingtx - .addOptionalParam( - 'gasprice', - 'gas price to use for transactions', - undefined, - types.string - ) - .addOptionalParam('maxfee', 'max fee per gas', undefined, types.string) - .addOptionalParam( - 'priorityfee', - 'max priority fee per gas', - undefined, - types.string - ) - .addOptionalParam( - 'deployScripts', - 'override deploy script folder path', - undefined, - types.string - ) - .addFlag('noImpersonation', 'do not impersonate unknown accounts') - .addFlag('noCompile', 'disable pre compilation') - .addFlag('reset', 'whether to delete deployments files first') - .addFlag('silent', 'whether to remove log') - .addFlag('watch', 'redeploy on every change of contract or deploy script') - .addFlag('reportGas', 'report gas use') - .setAction(async (args, hre) => { - if (args.noImpersonation) { - deploymentsManager.disableAutomaticImpersonation(); - } - if (args.deployScripts) { - // TODO support commas separated list - hre.network.deploy = [ - normalizePath(hre.config, args.deployScripts, args.deployScripts), - ]; - if (store.networks[getNetworkName(hre.network)]) { - store.networks[getNetworkName(hre.network)].deploy = hre.network.deploy; // fallback to global store - } - } - args.log = !args.silent; - delete args.silent; - if (args.write === undefined) { - args.write = !isHardhatEVM(hre); - } - args.pendingtx = !isHardhatEVM(hre); - await hre.run(TASK_DEPLOY_MAIN, args); - }); - -task( - TASK_EXPORT, - 'export contract deployment of the specified network into one file' -) - .addOptionalParam('export', 'export current network deployments') - .addOptionalParam('exportAll', 'export all deployments into one file') - .setAction(async (args) => { - await deploymentsManager.loadDeployments(false); - await deploymentsManager.export({ - export: args.export || process.env.HARDHAT_DEPLOY_EXPORT, - exportAll: args.exportAll || process.env.HARDHAT_DEPLOY_EXPORT_ALL, - }); - }); - -async function enableProviderLogging( - provider: EthereumProvider, - enabled: boolean -) { - await provider.request({ - method: 'hardhat_setLoggingEnabled', - params: [enabled], - }); -} - -task(TASK_NODE, 'Starts a JSON-RPC server on top of Hardhat EVM') - .addOptionalParam('export', 'export current network deployments') - .addOptionalParam('exportAll', 'export all deployments into one file') - .addOptionalParam( - 'tags', - 'specify which deploy script to execute via tags, separated by commas', - undefined, - types.string - ) - .addOptionalParam( - 'write', - 'whether to write deployments to file', - true, - types.boolean - ) - .addOptionalParam( - 'gasprice', - 'gas price to use for transactions', - undefined, - types.string - ) - .addOptionalParam('maxfee', 'max fee per gas', undefined, types.string) - .addOptionalParam( - 'priorityfee', - 'max priority fee per gas', - undefined, - types.string - ) - // TODO --unlock-accounts - .addFlag('noReset', 'do not delete deployments files already present') - .addFlag('noImpersonation', 'do not impersonate unknown accounts') - .addFlag('silent', 'whether to renove log') - .addFlag('noDeploy', 'do not deploy') - .addFlag('watch', 'redeploy on every change of contract or deploy script') - .setAction(async (args, hre, runSuper) => { - if (args.noImpersonation) { - deploymentsManager.disableAutomaticImpersonation(); - } - nodeTaskArgs = args; - if (!isHardhatEVM(hre)) { - throw new HardhatPluginError( - ` -Unsupported network for JSON-RPC server. Only hardhat is currently supported. -you can specifiy hardhat via "--network hardhat" -` - ); - } - - deploymentsManager.runAsNode(true); - - // console.log('node', args); - await runSuper(args); - }); - -subtask(TASK_NODE_GET_PROVIDER).setAction( - async (args, hre, runSuper): Promise => { - const provider = await runSuper(args); - - if (!nodeTaskArgs.noReset) { - await deploymentsManager.deletePreviousDeployments('localhost'); - } - - if (nodeTaskArgs.noDeploy) { - // console.log('skip'); - return provider; - } - // console.log('enabling logging'); - await enableProviderLogging(provider, false); - - const networkName = getNetworkName(hre.network); - if (networkName !== hre.network.name) { - console.log(`copying ${networkName}'s deployment to localhost...`); - // copy existing deployment from specified netwotk into localhost deployment folder - await fs.copy( - path.join(hre.config.paths.deployments, networkName), - path.join(hre.config.paths.deployments, 'localhost') - ); - } - - nodeTaskArgs.log = !nodeTaskArgs.silent; - delete nodeTaskArgs.silent; - nodeTaskArgs.pendingtx = false; - await hre.run(TASK_DEPLOY_MAIN, { - ...nodeTaskArgs, - watch: false, - reset: false, - }); - - await enableProviderLogging(provider, true); - - return provider; - } -); - -subtask(TASK_NODE_SERVER_READY).setAction(async (args, hre, runSuper) => { - await runSuper(args); - - if (nodeTaskArgs.watch) { - await hre.run(TASK_DEPLOY_MAIN, { - ...nodeTaskArgs, - watchOnly: true, - reset: false, - }); - } -}); - -task(TASK_ETHERSCAN_VERIFY, 'submit contract source code to etherscan') - .addOptionalParam('apiKey', 'etherscan api key', undefined, types.string) - .addOptionalParam( - 'license', - 'SPDX license (useful if SPDX is not listed in the sources), need to be supported by etherscan: https://etherscan.io/contract-license-types', - undefined, - types.string - ) - .addOptionalParam( - 'apiUrl', - 'specify the url manually', - undefined, - types.string - ) - .addOptionalParam( - 'contractName', - 'specific contract name to verify', - undefined, - types.string - ) - .addFlag( - 'forceLicense', - 'force the use of the license specified by --license option' - ) - .addFlag( - 'sleep', - 'sleep 500ms between each verification, so API rate limit is not exceeded' - ) - .addFlag( - 'solcInput', - 'fallback on solc-input (useful when etherscan fails on the minimum sources, see https://github.com/ethereum/solidity/issues/9573)' - ) - .addFlag( - 'writePostData', - 'write the post data on file in "etherscan_requests/" folder, for debugging purpose' - ) - .setAction(async (args, hre) => { - const etherscanApiKey = - args.apiKey || - process.env.ETHERSCAN_API_KEY || - hre.network.verify?.etherscan?.apiKey || - hre.config.verify?.etherscan?.apiKey; - if (!etherscanApiKey) { - throw new Error( - `No Etherscan API KEY provided. Set it through command line option, in hardhat.config.ts, or by setting the "ETHERSCAN_API_KEY" env variable` - ); - } - const solcInputsPath = await deploymentsManager.getSolcInputPath(); - await submitSources(hre, solcInputsPath, { - contractName: args.contractName, - etherscanApiKey, - license: args.license, - fallbackOnSolcInput: args.solcInput, - forceLicense: args.forceLicense, - sleepBetween: args.sleep, - apiUrl: args.apiUrl || hre.network.verify?.etherscan?.apiUrl, - writePostData: args.writePostData, - }); - }); - -task( - TASK_SOURCIFY, - 'submit contract source code to sourcify (https://sourcify.dev)' -) - .addOptionalParam( - 'endpoint', - 'endpoint url for sourcify', - undefined, - types.string - ) - .addOptionalParam( - 'contractName', - 'specific contract name to verify', - undefined, - types.string - ) - .addFlag( - 'writeFailingMetadata', - 'write to disk failing metadata for easy debugging' - ) - .setAction(async (args, hre) => { - await submitSourcesToSourcify(hre, args); - }); - -task('export-artifacts') - .addPositionalParam( - 'dest', - 'destination folder where the extended artifacts files will be written to', - undefined, - types.string - ) - .addFlag( - 'solcInput', - 'if set, artifacts will have an associated solcInput files (required for old version of solidity to ensure verifiability' - ) - .addFlag( - 'includingEmptyBytecode', - 'if set, even contract without bytecode (like interfaces) will be exported' - ) - .addFlag( - 'includingNoPublicFunctions', - 'if set, even contract without public interface (like imternal libraries) will be exported' - ) - .addOptionalParam( - 'exclude', - 'list of contract names separated by commas to exclude', - undefined, - types.string - ) - .addOptionalParam( - 'include', - 'list of contract names separated by commas to include. If specified, only these will be considered', - undefined, - types.string - ) - .addFlag( - 'hideSources', - 'if set, the artifacts files will not contain source code (metadata or other data exposing it) unless specified via --sources-for' - ) - .addOptionalParam( - 'sourcesFor', - 'list of contract names separated by commas to include source (metadata,etc...) for (see --hide-sources)', - undefined, - types.string - ) - .setAction(async (args, hre) => { - await hre.run('compile'); - const argsInclude: string[] = args.include ? args.include.split(',') : []; - const checkInclude = argsInclude.length > 0; - const include = argsInclude.reduce( - (result: Record, item: string) => { - result[item] = true; - return result; - }, - {} - ); - const argsExclude: string[] = args.exclude ? args.exclude.split(',') : []; - const exclude = argsExclude.reduce( - (result: Record, item: string) => { - result[item] = true; - return result; - }, - {} - ); - const argsSourcesFor: string[] = args.sourcesFor - ? args.sourcesFor.split(',') - : []; - const sourcesFor = argsSourcesFor.reduce( - (result: Record, item: string) => { - result[item] = true; - return result; - }, - {} - ); - const extendedArtifactFolderpath = args.dest; - fs.emptyDirSync(extendedArtifactFolderpath); - const artifactPaths = await hre.artifacts.getArtifactPaths(); - for (const artifactPath of artifactPaths) { - const artifact: Artifact = await fs.readJSON(artifactPath); - const artifactName = path.basename(artifactPath, '.json'); - if (exclude[artifactName]) { - continue; - } - if (checkInclude && !include[artifactName]) { - continue; - } - const artifactDBGPath = path.join( - path.dirname(artifactPath), - artifactName + '.dbg.json' - ); - const artifactDBG = await fs.readJSON(artifactDBGPath); - const buildinfoPath = path.join( - path.dirname(artifactDBGPath), - artifactDBG.buildInfo - ); - const buildInfo: BuildInfo = await fs.readJSON(buildinfoPath); - const output = - buildInfo.output.contracts[artifact.sourceName][artifactName]; - - if (!args.includingNoPublicFunctions) { - if ( - !artifact.abi || - artifact.abi.filter((v) => v.type !== 'event').length === 0 - ) { - continue; - } - } - - if (!args.includingEmptyBytecode) { - if (!artifact.bytecode || artifact.bytecode === '0x') { - continue; - } - } - - // TODO decide on ExtendedArtifact vs Artifact vs Deployment type - // save space by not duplicating bytecodes - if (output.evm?.bytecode?.object) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (output.evm.bytecode.object as any) = undefined; - } - if (output.evm?.deployedBytecode?.object) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (output.evm.deployedBytecode.object as any) = undefined; - } - // ----------------------------------------- - - const extendedArtifact: ExtendedArtifact = { - ...artifact, - ...output, - }; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (extendedArtifact as any)._format = undefined; - - if (args.solcInput) { - const solcInput = JSON.stringify(buildInfo.input, null, ' '); - const solcInputHash = Buffer.from(murmur128(solcInput)).toString('hex'); - extendedArtifact.solcInput = solcInput; - extendedArtifact.solcInputHash = solcInputHash; - } - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let dataToWrite: any = extendedArtifact; - if (args.hideSources && !sourcesFor[artifactName]) { - dataToWrite = { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - contractName: (extendedArtifact as any).contractName, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - sourceName: (extendedArtifact as any).sourceName, - abi: extendedArtifact.abi, - bytecode: extendedArtifact.bytecode, - deployedBytecode: extendedArtifact.deployedBytecode, - linkReferences: extendedArtifact.linkReferences, - deployedLinkReferences: extendedArtifact.deployedLinkReferences, - devdoc: extendedArtifact.devdoc, - userdoc: extendedArtifact.userdoc, - evm: extendedArtifact.evm - ? { - gasEstimates: extendedArtifact.evm.gasEstimates, - methodIdentifiers: extendedArtifact.evm.methodIdentifiers, - } - : undefined, - }; - } - - let filepath = path.join( - extendedArtifactFolderpath, - artifactName + '.json' - ); - if (dataToWrite.sourceName) { - if (dataToWrite.contractName) { - filepath = path.join( - extendedArtifactFolderpath, - dataToWrite.sourceName, - dataToWrite.contractName + '.json' - ); - } else { - filepath = path.join( - extendedArtifactFolderpath, - dataToWrite.sourceName, - artifactName + '.json' - ); - } - } - - fs.ensureFileSync(filepath); - fs.writeFileSync(filepath, JSON.stringify(dataToWrite, null, ' ')); - } - }); - -subtask( - TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD, - async ( - args: { - solcVersion: string; - }, - hre, - runSuper - ) => { - const nw = hre.hardhatArguments['network'] - ? hre.hardhatArguments['network'] - : 'localhost'; - if (hre.config.networks[nw].tron && (hre.config as any)?.tronSolc?.enable) { - // are we using tron-solc compiler and is the network a Tron network - return await loadTronSolc(args.solcVersion); - } - return runSuper(); - } -); diff --git a/src/internal/types.ts b/src/internal/types.ts deleted file mode 100644 index d0686bf..0000000 --- a/src/internal/types.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Artifact } from 'hardhat/types'; - -import { - Deployment, - FixtureFunc, - DeploymentSubmission, - ExtendedArtifact, -} from '../../types'; - -export interface PartialExtension { - readDotFile(name: string): Promise; - saveDotFile(name: string, content: string): Promise; - deleteDotFile(name: string): Promise; - - save(name: string, deployment: DeploymentSubmission): Promise; - delete(name: string): Promise; - - get(name: string): Promise; - getOrNull(name: string): Promise; - getDeploymentsFromAddress(address: string): Promise; - all(): Promise<{ [name: string]: Deployment }>; - getExtendedArtifact(name: string): Promise; - getArtifact(name: string): Promise; - run( - tags?: string | string[], - options?: { - resetMemory?: boolean; - deletePreviousDeployments?: boolean; - writeDeploymentsToFiles?: boolean; - export?: string; - exportAll?: string; - } - ): Promise<{ [name: string]: Deployment }>; - fixture( - tags?: string | string[], - options?: { fallbackToGlobal?: boolean; keepExistingDeployments?: boolean } - ): Promise<{ [name: string]: Deployment }>; - createFixture( - func: FixtureFunc, - id?: string - ): (options?: O) => Promise; - log(...args: unknown[]): void; - - getNetworkName(): string; - getGasUsed(): number; - readonly isTronNetworkWithTronSolc: boolean; -} diff --git a/src/internal/utils.ts b/src/internal/utils.ts deleted file mode 100644 index 59a06f5..0000000 --- a/src/internal/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -export function bnReplacer(k: string, v: any): any { - if (typeof v === 'bigint') { - return v.toString(); - } - return v; -} diff --git a/src/llm.ts b/src/llm.ts deleted file mode 100644 index aba7ad7..0000000 --- a/src/llm.ts +++ /dev/null @@ -1,39 +0,0 @@ -// 基础配置 -interface BaseProviderConfig { - apiKey: string; - model: string; -} - -// 兼容 OpenAI API 的提供商(包括 OpenAI 自己) -interface OpenAICompatibleConfig extends BaseProviderConfig { - baseURL?: string; // 对于 OpenAI 本身是可选的,对于其他兼容模型是必需的 -} - -// Gemini 的特定配置 -type GeminiConfig = BaseProviderConfig; - -// Azure 的特定配置 -interface AzureConfig extends BaseProviderConfig { - endpoint: string; - deploymentName: string; - apiVersion: string; -} - -// 所有可能配置的联合类型 -export type LlmProviderConfig = - | OpenAICompatibleConfig - | GeminiConfig - | AzureConfig; - -// 主配置对象的类型 -export interface LlmConfig { - defaultProvider: keyof LlmConfig['providers']; - promptTemplate?: string; - providers: { - openai: OpenAICompatibleConfig; - gemini: GeminiConfig; - qwen: OpenAICompatibleConfig; - deepseek: OpenAICompatibleConfig; - azure_openai: AzureConfig; - }; -} diff --git a/src/old_diamondbase.json b/src/old_diamondbase.json deleted file mode 100644 index 9fa4e6b..0000000 --- a/src/old_diamondbase.json +++ /dev/null @@ -1,275 +0,0 @@ -{ - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "internalType": "struct Diamond.DiamondArgs", - "name": "_args", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "owner_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "deployedBytecode": "0x60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906115f3565b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100d6573d6000f35b3d6000fd5b60005b83518110156102325760008482815181106100f557fe5b60200260200101516020015190506000600281111561011057fe5b81600281111561011c57fe5b141561015f5761015a85838151811061013157fe5b60200260200101516000015186848151811061014957fe5b602002602001015160400151610326565b610229565b600181600281111561016d57fe5b14156101ab5761015a85838151811061018257fe5b60200260200101516000015186848151811061019a57fe5b60200260200101516040015161065e565b60028160028111156101b957fe5b14156101f75761015a8583815181106101ce57fe5b6020026020010151600001518684815181106101e657fe5b6020026020010151604001516109ab565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611539565b506001016100de565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161026693929190611282565b60405180910390a16102788282610acb565b505050565b6000610287610302565b60048101805473ffffffffffffffffffffffffffffffffffffffff8581167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6000815111610361576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061147f565b600061036b610302565b905073ffffffffffffffffffffffffffffffffffffffff83166103ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611596565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff81166104ab5761040d8460405180606001604052806024815260200161184e60249139610c81565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b83518110156106575760008482815181106104c557fe5b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff168015610554576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906116e2565b5073ffffffffffffffffffffffffffffffffffffffff86166000818152600186810160209081526040808420805480850182559085528285206008820401805463ffffffff60079093166004026101000a928302191660e089901c929092029190911790557fffffffff00000000000000000000000000000000000000000000000000000000909516835287905292902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff86160217905591820191016104ae565b5050505050565b6000815111610699576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061147f565b60006106a3610302565b905073ffffffffffffffffffffffffffffffffffffffff83166106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611596565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260018201602052604090205461ffff81166107e3576107458460405180606001604052806024815260200161184e60249139610c81565b60028201805473ffffffffffffffffffffffffffffffffffffffff861660008181526001808701602090815260408320820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff90961695909517909455845490810185559381529190912090910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b60005b83518110156106575760008482815181106107fd57fe5b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529186905260409091205490915073ffffffffffffffffffffffffffffffffffffffff908116908716811415610892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061173f565b61089c8183610cbc565b507fffffffff00000000000000000000000000000000000000000000000000000000811660008181526020868152604080832080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8a160217815573ffffffffffffffffffffffffffffffffffffffff8b168085526001808b018552928520805480850182559086528486206008820401805463ffffffff60079093166004026101000a928302191660e09990991c91909102979097179096559390925286905281547fffffffffffffffffffffffff000000000000000000000000000000000000000016909217905591820191016107e6565b60008151116109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061147f565b60006109f0610302565b905073ffffffffffffffffffffffffffffffffffffffff831615610a40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae9061179c565b60005b8251811015610ac5576000838281518110610a5a57fe5b6020908102919091018101517fffffffff00000000000000000000000000000000000000000000000000000000811660009081529185905260409091205490915073ffffffffffffffffffffffffffffffffffffffff16610abb8183610cbc565b5050600101610a43565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b2457805115610b1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906113c5565b610c7d565b6000815111610b5f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611628565b73ffffffffffffffffffffffffffffffffffffffff82163014610b9e57610b9e8260405180606001604052806028815260200161182660289139610c81565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610bc69190611266565b600060405180830381855af49150503d8060008114610c01576040519150601f19603f3d011682016040523d82523d6000602084013e610c06565b606091505b509150915081610ac557805115610c4b57806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae91906113ab565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611422565b5050565b813b8181610ac5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae91906113ab565b6000610cc6610302565b905073ffffffffffffffffffffffffffffffffffffffff8316610d15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae906114dc565b73ffffffffffffffffffffffffffffffffffffffff8316301415610d65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ae90611685565b7fffffffff0000000000000000000000000000000000000000000000000000000082166000908152602082815260408083205473ffffffffffffffffffffffffffffffffffffffff8716845260018501909252909120547401000000000000000000000000000000000000000090910461ffff16907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01808214610f375773ffffffffffffffffffffffffffffffffffffffff851660009081526001840160205260408120805483908110610e3657fe5b6000918252602080832060088304015473ffffffffffffffffffffffffffffffffffffffff8a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610e8e57fe5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790557fffffffff000000000000000000000000000000000000000000000000000000009290921682528490526040902080547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8516021790555b73ffffffffffffffffffffffffffffffffffffffff851660009081526001840160205260409020805480610f6757fe5b6000828152602080822060087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193840401805463ffffffff600460078716026101000a0219169055919092557fffffffff00000000000000000000000000000000000000000000000000000000861682528490526040902080547fffffffffffffffffffff000000000000000000000000000000000000000000001690558061065757600283015473ffffffffffffffffffffffffffffffffffffffff861660009081526001858101602052604090912001547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019061ffff1680821461114357600085600201838154811061107e57fe5b60009182526020909120015460028701805473ffffffffffffffffffffffffffffffffffffffff90921692508291849081106110b657fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559290911681526001878101909252604090200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83161790555b8460020180548061115057fe5b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905590920190925573ffffffffffffffffffffffffffffffffffffffff89168252600187810190915260409091200180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905550505050505050565b73ffffffffffffffffffffffffffffffffffffffff169052565b600081518084526112348160208601602086016117f9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082516112788184602087016117f9565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b8481101561137c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8403018652815188840173ffffffffffffffffffffffffffffffffffffffff8251168552858201516003811061130457fe5b858701526040918201519185018a9052815190819052908501908a90898601905b808310156113675783517fffffffff00000000000000000000000000000000000000000000000000000000168252928701926001929092019190870190611325565b509786019794505050908301906001016112a8565b505061138a8289018b611202565b878103604089015261139c818a61121c565b9b9a5050505050505050505050565b6000602082526113be602083018461121c565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560408201527f7665727465640000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201527f6163657420746f20637574000000000000000000000000000000000000000000606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360408201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560408201527f74416374696f6e00000000000000000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201527f6520616464726573732830290000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374604082015260600190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602e908201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560408201527f7461626c652066756e6374696f6e000000000000000000000000000000000000606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60408201527f6e207468617420616c7265616479206578697374730000000000000000000000606082015260800190565b60208082526038908201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60408201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b60005b838110156118145781810151838201526020016117fc565b83811115610ac5575050600091015256fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a264697066735822122054a3c3a118803545231f43700030cb5e290869be0182196a4a05e7d4a1b71d7e64736f6c63430007060033" -} diff --git a/src/process/spawn.ts b/src/process/spawn.ts new file mode 100644 index 0000000..6c85caa --- /dev/null +++ b/src/process/spawn.ts @@ -0,0 +1,11 @@ +import { spawn } from 'node:child_process'; +import { CliError } from '../errors.js'; +export async function spawnNative(executable: string, args: readonly string[], cwd: string): Promise { + return await new Promise((resolve, reject) => { + const child = spawn(executable, args, { cwd, stdio: 'inherit', shell: false, windowsHide: false }); + const onInt = (): void => { child.kill('SIGINT'); }; const onTerm = (): void => { child.kill('SIGTERM'); }; + process.once('SIGINT', onInt); process.once('SIGTERM', onTerm); + child.once('error', error => reject(new CliError(`failed to start ${executable}: ${error.message}`, 6))); + child.once('exit', (code, signal) => { process.off('SIGINT', onInt); process.off('SIGTERM', onTerm); resolve(code ?? (signal === 'SIGINT' ? 130 : signal === 'SIGTERM' ? 143 : 1)); }); + }); +} diff --git a/src/project/binding.ts b/src/project/binding.ts new file mode 100644 index 0000000..68005e9 --- /dev/null +++ b/src/project/binding.ts @@ -0,0 +1,26 @@ +import { readFileSync } from 'node:fs'; +import { CliError } from '../errors.js'; +export type Framework = 'hardhat' | 'foundry'; +export type Target = 'tron' | 'evm'; +export interface Binding { framework: Framework; target: Target } +export function readBinding(path: string): Binding { + let text: string; + try { text = readFileSync(path, 'utf8'); } catch (error) { throw new CliError(`cannot read ${path}: ${msg(error)}`, 4); } + let section = ''; + const values = new Map(); + for (const raw of text.split(/\r?\n/u)) { + const line = raw.replace(/\s+#.*$/u, '').trim(); + if (!line) continue; + const header = /^\[(.+)\]$/u.exec(line); + if (header) { section = header[1] ?? ''; continue; } + if (section !== 'project') continue; + const assignment = /^(framework|target)\s*=\s*"([^"]+)"\s*$/u.exec(line); + if (!assignment) throw new CliError(`invalid project binding in ${path}: ${line}`, 4); + values.set(assignment[1]!, assignment[2]!); + } + const framework = values.get('framework'); const target = values.get('target'); + if (framework !== 'hardhat' && framework !== 'foundry') throw new CliError(`invalid framework in ${path}; expected hardhat or foundry`, 4); + if (target !== 'tron' && target !== 'evm') throw new CliError(`invalid target in ${path}; expected tron or evm`, 4); + return { framework, target }; +} +function msg(error: unknown): string { return error instanceof Error ? error.message : String(error); } diff --git a/src/project/root.ts b/src/project/root.ts new file mode 100644 index 0000000..21a5088 --- /dev/null +++ b/src/project/root.ts @@ -0,0 +1,8 @@ +import { existsSync } from 'node:fs'; +import { dirname, parse, resolve } from 'node:path'; +import { CliError } from '../errors.js'; +export function findProjectRoot(start: string): string { + let current = resolve(start); const filesystemRoot = parse(current).root; + for (;;) { if (existsSync(resolve(current, 'sunhat.toml'))) return current; if (current === filesystemRoot) break; current = dirname(current); } + throw new CliError('sunhat.toml not found; initialize with `sunhat init` or adopt with `sunhat init --adopt`', 4); +} diff --git a/src/sourcify.ts b/src/sourcify.ts deleted file mode 100644 index 4043501..0000000 --- a/src/sourcify.ts +++ /dev/null @@ -1,120 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import axios from 'axios'; -import FormData from 'form-data'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import chalk from 'chalk'; -import fs from 'fs-extra'; -import path from 'path'; -import { Readable } from 'stream'; - -function log(...args: any[]) { - console.log(...args); -} - -function logError(...args: any[]) { - console.log(chalk.red(...args)); -} - -function logInfo(...args: any[]) { - console.log(chalk.yellow(...args)); -} - -function logSuccess(...args: any[]) { - console.log(chalk.green(...args)); -} - -function ensureTrailingSlash(s: string): string { - const lastChar = s.substr(-1); - if (lastChar != '/') { - s = s + '/'; - } - return s; -} - -// const defaultEndpoint = 'https://server.verificationstaging.shardlabs.io/'; -const defaultEndpoint = 'https://sourcify.dev/server/'; - -export async function submitSourcesToSourcify( - hre: HardhatRuntimeEnvironment, - config?: { - endpoint?: string; - contractName?: string; - writeFailingMetadata?: boolean; - } -): Promise { - config = config || {}; - const chainId = await hre.getChainId(); - const all = await hre.deployments.all(); - const url = config.endpoint - ? ensureTrailingSlash(config.endpoint) - : defaultEndpoint; - - async function submit(name: string) { - const deployment = all[name]; - const { address, metadata: metadataString } = deployment; - - try { - const checkResponse = await axios.get( - `${url}checkByAddresses?addresses=${address.toLowerCase()}&chainIds=${chainId}` - ); - const { data: checkData } = checkResponse; - if (checkData[0].status === 'perfect') { - log(`already verified: ${name} (${address}), skipping.`); - return; - } - } catch (e) { - logError( - ((e as any).response && JSON.stringify((e as any).response.data)) || e - ); - } - - if (!metadataString) { - logError( - `Contract ${name} was deployed without saving metadata. Cannot submit to sourcify, skipping.` - ); - return; - } - - logInfo(`verifying ${name} (${address} on chain ${chainId}) ...`); - - const formData = new FormData(); - formData.append('address', address); - formData.append('chain', chainId); - - const fileStream = new Readable(); - fileStream.push(metadataString); - fileStream.push(null); - formData.append('files', fileStream, 'metadata.json'); - - try { - const submissionResponse = await axios.post(url, formData, { - headers: formData.getHeaders(), - }); - if (submissionResponse.data.result[0].status === 'perfect') { - logSuccess(` => contract ${name} is now verified`); - } else { - logError(` => contract ${name} is not verified`); - } - } catch (e) { - if (config && config.writeFailingMetadata) { - const failingMetadataFolder = path.join('failing_metadata', chainId); - fs.ensureDirSync(failingMetadataFolder); - fs.writeFileSync( - path.join(failingMetadataFolder, `${name}_at_${address}.json`), - metadataString - ); - } - logError( - ((e as any).response && JSON.stringify((e as any).response.data)) || e - ); - } - } - - if (config.contractName) { - await submit(config.contractName); - } else { - for (const name of Object.keys(all)) { - await submit(name); - } - } -} diff --git a/src/tasks/audit.ts b/src/tasks/audit.ts deleted file mode 100644 index d0e5b18..0000000 --- a/src/tasks/audit.ts +++ /dev/null @@ -1,358 +0,0 @@ -import { task } from 'hardhat/config'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import fs from 'fs-extra'; -import path from 'path'; -import { glob } from 'glob'; -import OpenAI from 'openai'; -import { AzureOpenAI } from 'openai'; -import { GoogleGenerativeAI } from '@google/generative-ai'; -import { LlmConfig, LlmProviderConfig } from '../llm'; - -type ProviderName = keyof LlmConfig['providers']; -type SupportedLanguage = 'solidity' | 'vyper'; - -interface AuditTaskArgs { - contract?: string; - provider?: ProviderName; - format?: 'text' | 'json'; -} - -/** - * 统一的 LLM 调用函数 - */ -async function callLLM( - provider: ProviderName, - config: LlmProviderConfig, - prompt: string -): Promise { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - console.log(`[INFO] Using provider: ${provider}, model: ${config.model}`); - - switch (provider) { - case 'openai': - case 'qwen': - case 'deepseek': { - const openaiConfig = config as LlmConfig['providers']['openai']; - const openai = new OpenAI({ - apiKey: openaiConfig.apiKey, - baseURL: openaiConfig.baseURL, - }); - const response = await openai.chat.completions.create({ - model: openaiConfig.model, - messages: [ - { - role: 'system', - content: - 'You are a professional and meticulous smart contract auditor.', - }, - { role: 'user', content: prompt }, - ], - temperature: 0.3, - }); - return response.choices[0].message.content ?? ''; - } - case 'azure_openai': { - const azureConfig = config as LlmConfig['providers']['azure_openai']; - const azureClient = new AzureOpenAI({ - endpoint: azureConfig.endpoint, - apiKey: azureConfig.apiKey, - apiVersion: azureConfig.apiVersion, - deployment: azureConfig.deploymentName, - }); - - console.log(`[INFO] Using model deployment: ${azureConfig.model}`); - const response = await azureClient.chat.completions.create({ - model: azureConfig.model, - messages: [ - { - role: 'system', - content: - 'You are a professional and meticulous smart contract auditor.', - }, - { role: 'user', content: prompt }, - ], - temperature: 0.3, - }); - return response.choices[0].message.content ?? ''; - } - case 'gemini': { - const geminiConfig = config as LlmConfig['providers']['gemini']; - const genAI = new GoogleGenerativeAI(geminiConfig.apiKey); - const model = genAI.getGenerativeModel({ model: geminiConfig.model }); - const result = await model.generateContent(prompt); - const response = await result.response; - return response.text(); - } - - default: - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - throw new Error(`Unsupported LLM provider: ${provider}`); - } -} - -/** - * 根据配置获取基础审计 Prompt - */ -function getBasePromptTemplate(llmConfig: LlmConfig): string { - const defaultPromptTemplate = `As an expert smart contract auditor, please analyze the following {language} code. -The file name is '{contractName}'. - -Your analysis should cover: -1. **Security Vulnerabilities**: Identify potential risks. -2. **Gas Optimization**: Suggest gas-saving improvements. -3. **Best Practices**: Check for code style and common practices.`; - - const userPrompt = llmConfig.promptTemplate; - return userPrompt || defaultPromptTemplate; -} - -/** - * 生成最终的审计 Prompt - */ -function getAuditPrompt( - contractName: string, - contractCode: string, - format: 'text' | 'json', - llmConfig: LlmConfig, - language: SupportedLanguage -): string { - const codeWithLineNumbers = contractCode - .split('\n') - .map((line, index) => `${index + 1}: ${line}`) - .join('\n'); - - let basePrompt = getBasePromptTemplate(llmConfig); - basePrompt = basePrompt - .replace('{contractName}', contractName) - .replace('{codeWithLineNumbers}', codeWithLineNumbers) - .replace('{language}', language); - - if (format === 'json') { - return ` - ${basePrompt} - - Your response MUST be a single, valid JSON array of objects, enclosed in a single \`\`\`json code block. Do not add any text before or after the JSON block. - Each object in the array represents a single issue you've found and must conform to this exact structure: - { - 'severity': 'HIGH' | 'MEDIUM' | 'LOW' | 'INFO', - 'filePath': '${contractName}', - 'lineNumber': , - 'message': '', - 'detailedDescription': '', - 'suggestion': '' - } - - If you find no issues, return an empty array []. - - Now, analyze the following contract code: - \`\`\`${language} - ${codeWithLineNumbers} - \`\`\` - `; - } - - return ` - ${basePrompt} - - **CRITICAL**: For each issue you find, you MUST format the title of the issue on a single line like this: - [SEVERITY]|[FILE_PATH]:[LINE_NUMBER] - [BRIEF_DESCRIPTION] - - - **SEVERITY**: Use one of: HIGH, MEDIUM, LOW, INFO. - - **FILE_PATH**: This MUST be the exact filename provided: ${contractName}. - - **LINE_NUMBER**: The specific line number where the issue occurs. - - **BRIEF_DESCRIPTION**: A short, one-sentence summary of the issue. - - After this title line, provide a detailed explanation and a code snippet with your suggested modification. - - Example of a single issue's format: - --- - MEDIUM|MyContract.sol:42 - Re-entrancy risk in the withdraw function. - - **Details**: The current implementation of the \`withdraw\` function updates the user's balance *after* the external call (transfer), which makes it vulnerable to a re-entrancy attack. - - **Recommendation**: - \`\`\`diff - - balance[msg.sender] = 0; - - (bool sent, ) = msg.sender.call{value: amount}(''); - + (bool sent, ) = msg.sender.call{value: amount}(''); - + require(sent, 'Failed to send Ether'); - + balance[msg.sender] = 0; - \`\`\` - --- - - Now, analyze the following contract code: - \`\`\`${language} - ${codeWithLineNumbers} - \`\`\` - `; -} - -// 提取 Markdown JSON -function extractJson(rawOutput: string): string { - const match = rawOutput.match(/```json\s*(\[[\s\S]*?\])\s*```/); - if (!match || !match[1]) { - try { - JSON.parse(rawOutput); - return rawOutput; - } catch (e) { - throw new Error( - 'Could not find a valid JSON code block or parse the raw output as JSON.' - ); - } - } - return match[1]; -} - -task('audit', 'Audits a smart contract using a specified LLM provider') - .addOptionalParam( - 'contract', - 'The name of the contract file to audit (e.g., "MyContract.sol"). If not provided, audits all contracts.' - ) - .addOptionalParam( - 'provider', - 'The LLM provider to use (openai, azure_openai, gemini, qwen, deepseek)' - ) - .addOptionalParam('format', 'The output format: "text" (default) or "json"') - .setAction( - async (taskArgs: AuditTaskArgs, hre: HardhatRuntimeEnvironment) => { - const { - contract: contractArg, - provider: providerArg, - format: formatArg, - } = taskArgs; - const { llm: llmConfig } = hre.config; - const format = formatArg || 'text'; - const provider = providerArg || llmConfig.defaultProvider; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const providerConfig = llmConfig.providers[provider] as any; - - if (!providerConfig || !providerConfig.apiKey) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - console.error( - `\n[ERROR] Configuration for provider '${provider}' is missing or incomplete. Check your hardhat.config.ts and .env file.` - ); - return; - } - - let contractPaths: string[]; - const sourcesPath = hre.config.paths.sources; - - if (!contractArg || contractArg.toLowerCase() === 'all') { - console.log( - '[INFO] No specific contract provided. Auditing all contracts...' - ); - contractPaths = await glob(`${sourcesPath}/**/*.{sol,vy}`); - } else { - contractPaths = [path.resolve(sourcesPath, contractArg)]; - } - - if (contractPaths.length === 0) { - console.error('\n[ERROR] No contract files found to audit.'); - return; - } - - console.log(`[INFO] Found ${contractPaths.length} contract(s) to audit.`); - - const allIssues: any[] = []; - for (const contractPath of contractPaths) { - const contractName = path.basename(contractPath); - - const extension = path.extname(contractPath).substring(1); // 'sol' or 'vy' - let language: SupportedLanguage; - - if (extension === 'sol') { - language = 'solidity'; - } else if (extension === 'vy') { - language = 'vyper'; - } else { - console.warn( - `[WARN] Unsupported file type '.${extension}' for ${contractName}. Skipping.` - ); - continue; - } - - console.log(`\n---------------------------------------------`); - console.log(` Auditing: ${contractName} (${language})`); - console.log(`---------------------------------------------\n`); - - let contractCode: string; - try { - const resolvedPath = path.resolve( - hre.config.paths.sources, - contractName - ); - contractCode = fs.readFileSync(resolvedPath, 'utf8'); - console.log(`[INFO] Successfully read contract: ${contractName}`); - } catch (error) { - console.error( - `\n[ERROR] Could not read contract file: ${contractName}.` - ); - continue; - } - - const prompt = getAuditPrompt( - contractName, - contractCode, - format, - llmConfig, - language - ); - - try { - console.log( - `[INFO] Sending code to LLM for analysis (format: ${format})...` - ); - const rawAnalysis = await callLLM(provider, providerConfig, prompt); - console.log(`\n=============================================`); - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - console.log( - ` 🤖 LLM Audit Report for ${contractName} (${( - provider as string - ).toUpperCase()})` - ); - console.log(`=============================================\n`); - console.log(rawAnalysis); - if (format === 'json') { - const jsonString = extractJson(rawAnalysis); - try { - const parsedJson = JSON.parse(jsonString); - allIssues.push(...parsedJson); - } catch (e) { - console.error( - "\n[ERROR] Failed to parse the JSON extracted from the LLM's response." - ); - if (e instanceof SyntaxError) { - console.error('Syntax Error:', e.message); - } - console.error( - 'Extracted string that failed to parse:', - jsonString - ); - } - } - } catch (error: any) { - console.error( - `\n[ERROR] An error occurred during the audit of ${contractName}:` - ); - console.error(error.message); - } - } - if (format === 'json') { - if (allIssues.length > 0) { - const formattedJsonString = JSON.stringify(allIssues, null, 2); - const outputPath = path.join( - hre.config.paths.root, - 'audit-report.json' - ); - fs.writeFileSync(outputPath, formattedJsonString, 'utf8'); - console.log( - `\n✅ [SUCCESS] Combined audit report for ${contractPaths.length} contract(s) has been saved to: ${outputPath}` - ); - } else { - console.log( - `\n✅ [SUCCESS] All contracts were audited, and no issues were found.` - ); - } - } - } - ); diff --git a/src/tasks/compile.ts b/src/tasks/compile.ts deleted file mode 100644 index 8f353f3..0000000 --- a/src/tasks/compile.ts +++ /dev/null @@ -1,160 +0,0 @@ -import { task, subtask } from 'hardhat/config'; -import { - TASK_COMPILE, - TASK_COMPILE_SOLIDITY_LOG_COMPILATION_ERRORS, -} from 'hardhat/builtin-tasks/task-names'; -import fs from 'fs-extra'; -import path from 'path'; - -/** - * Appends issues to the compilation-errors.json file. - */ -function reportIssues(hre: any, issues: any[], append: boolean = false) { - const errorFilePath = path.join( - hre.config.paths.root, - 'compilation-errors.json' - ); - let allIssues = issues; - - if (append && fs.existsSync(errorFilePath)) { - try { - const existing = fs.readJsonSync(errorFilePath); - if (Array.isArray(existing)) { - allIssues = [...existing, ...issues]; - } - } catch (e) { - // Ignore read errors - } - } - - fs.writeJsonSync(errorFilePath, allIssues, { spaces: 2 }); - (hre as any)._sunhatIssuesCount = - ((hre as any)._sunhatIssuesCount || 0) + issues.length; -} - -task(TASK_COMPILE).setAction(async (args, hre, runSuper) => { - (hre as any)._sunhatIssuesCount = 0; - (hre as any)._solidityErrorsCaptured = false; - - try { - await runSuper(args); - - // Clear the file only if no issues (errors/warnings) were reported during the entire process - if (((hre as any)._sunhatIssuesCount || 0) === 0) { - reportIssues(hre, []); - } - } catch (error: any) { - // If Solidity didn't already capture and report detailed errors, - // or if the failure is NOT the standard Solidity failure, try to parse it. - if ( - !(hre as any)._solidityErrorsCaptured || - !error.message.includes('HH600') - ) { - let errors = []; - let filePath = 'hardhat.config.ts'; - - if (error.cmd) { - const cmdMatch = error.cmd.match(/\s([^\s]+\.vy)$/); - if (cmdMatch) filePath = cmdMatch[1]; - } - - const lineColMatch = error.message.match(/line (\d+):(\d+)/); - const lineOnlyMatch = error.message.match(/line (\d+)/); - const arrowMatch = error.message.match( - /(?:-->\s+)?([^:\s\n]+):(\d+):(\d+):/ - ); - - if (lineColMatch || lineOnlyMatch || arrowMatch) { - let line = 0; - let column = 0; - - if (arrowMatch) { - filePath = arrowMatch[1]; - line = parseInt(arrowMatch[2]); - column = parseInt(arrowMatch[3]); - } else if (lineColMatch) { - line = parseInt(lineColMatch[1]); - column = parseInt(lineColMatch[2]); - } else if (lineOnlyMatch) { - line = parseInt(lineOnlyMatch[1]); - } - - const messageLines = error.message.split('\n'); - const exceptionLine = messageLines.find( - (l: string) => l.includes('Exception:') || l.includes('Error:') - ); - const message = exceptionLine - ? exceptionLine.trim() - : error.message.split('\n')[0]; - - errors.push({ - filePath, - line, - column, - severity: 'error', - message, - original: error.message, - }); - } - - if (errors.length === 0) { - errors.push({ - filePath: 'hardhat.config.ts', - line: 0, - column: 0, - severity: 'error', - message: error.message, - original: error.message, - }); - } - - // Append if we already have some (e.g. Solidity warnings followed by Vyper error) - reportIssues(hre, errors, ((hre as any)._sunhatIssuesCount || 0) > 0); - } - throw error; - } -}); - -subtask(TASK_COMPILE_SOLIDITY_LOG_COMPILATION_ERRORS).setAction( - async (taskArgs: any, hre, runSuper) => { - const outputErrors = taskArgs.output?.errors || []; - const validIssues = []; - let hasStrictError = false; - - for (const issue of outputErrors) { - let filePath = issue.sourceLocation?.file || 'unknown'; - let line = 0; - let column = 0; - const severity = issue.severity || 'error'; - if (severity === 'error') hasStrictError = true; - - if (issue.formattedMessage) { - const match = issue.formattedMessage.match( - /(?:-->\s+)?([^:\s\n]+):(\d+):(\d+):/ - ); - if (match) { - if (filePath === 'unknown') filePath = match[1]; - line = parseInt(match[2]); - column = parseInt(match[3]); - } - } - - validIssues.push({ - filePath, - line, - column, - severity, - message: issue.message || issue.formattedMessage, - original: issue.formattedMessage, - detailed: issue, - }); - } - - if (hasStrictError) { - (hre as any)._solidityErrorsCaptured = true; - } - - reportIssues(hre, validIssues, ((hre as any)._sunhatIssuesCount || 0) > 0); - return runSuper(taskArgs); - } -); diff --git a/src/toolchain/releases.ts b/src/toolchain/releases.ts new file mode 100644 index 0000000..9bac4ff --- /dev/null +++ b/src/toolchain/releases.ts @@ -0,0 +1,26 @@ +import type { Target } from '../project/binding.js'; +import { toolchainError } from '../errors.js'; +export interface Release { source: string; release: string; revision: string; archive: string; sha256: string; tools: Record<'forge' | 'cast' | 'anvil' | 'chisel', string> } +type Platform = 'darwin-arm64' | 'darwin-amd64' | 'linux-arm64' | 'linux-amd64' | 'win32-amd64'; +const EVM_SHA: Record = { + 'darwin-arm64': 'd6bc05ee937b4308bded496068728c8ba140abe49dd7527f37e025bc335b91ec', 'darwin-amd64': 'c0b032cdfda5fdce75ab6b782785f3f28aaf431bd55daecfb6437d01369f235e', + 'linux-arm64': 'ca61f3f6e7d635f34e3e174409964d29126fa135794cd84cead8919dd50e0930', 'linux-amd64': '58850106984038f3a7200f38a4182c8cb423d3a4f4c7848eacbc2453e6bc35fc', + 'win32-amd64': '924d6395786af438e7cb315f6835185f99d727ed6127dbbc4e6a62eb14edcfff', +}; +const TRON_SHA: Record = { + 'darwin-arm64': 'b40d08504352475c937cc66bd69eacd35f9ac580abd55d5b294e5cbd0e23cf31', 'darwin-amd64': 'dc2c3f22ec2292885d41617105a5356946bf3efa1d9736ea5d5fd68b802a937a', + 'linux-arm64': '4f2dbe50848d21708e44b2dde168298fa468d8fed0a6ebca0fe9e22ad0f0c27c', 'linux-amd64': '7d684c883b72cc407fef77eab90c9304b5bdd310a465f18e8fd199e595e04331', + 'win32-amd64': 'c257cef8478334544521e3d6f1da58eaecc21ece8b404dea96831156d9979cc4', +}; +export function platformKey(): Platform { + const key = `${process.platform}-${process.arch === 'x64' ? 'amd64' : process.arch}`; + if (!(key in EVM_SHA)) return toolchainError(`unsupported Foundry platform ${process.platform}-${process.arch}`); + return key as Platform; +} +export function releaseFor(target: Target): Release { + const platform = platformKey(); const extension = platform.startsWith('win32') ? 'zip' : 'tar.gz'; + const executableExtension = platform.startsWith('win32') ? '.exe' : ''; + if (target === 'evm') return { source: 'foundry-rs/foundry', release: 'v1.8.6', revision: 'v1.8.6', archive: `foundry_v1.8.6_${platform.replace('-', '_')}.${extension}`, sha256: EVM_SHA[platform], tools: { forge: `forge${executableExtension}`, cast: `cast${executableExtension}`, anvil: `anvil${executableExtension}`, chisel: `chisel${executableExtension}` } }; + return { source: 'elsvv/foundry-tron', release: 'foundry-tron-latest', revision: '9ea07db4b342fd606f6f7c3f99be1757e90d5e90', archive: `foundry-tron_${platform.replace('-', '_')}.${extension}`, sha256: TRON_SHA[platform], tools: { forge: `forge-tron${executableExtension}`, cast: `cast-tron${executableExtension}`, anvil: `anvil-tron${executableExtension}`, chisel: `chisel-tron${executableExtension}` } }; +} +export function releaseUrl(release: Release): string { return `https://github.com/${release.source}/releases/download/${release.release}/${release.archive}`; } diff --git a/src/tron/contract.ts b/src/tron/contract.ts deleted file mode 100644 index c35dc97..0000000 --- a/src/tron/contract.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { TronSigner } from './signer'; -import { Contract, ContractFactory, ContractInterface, ethers } from 'ethers'; -import { TransactionRequest } from '@ethersproject/providers'; -import { CreateSmartContract, MethodSymbol, TronTxMethods } from './types'; -import { strip0x } from './utils'; -export { Contract } from 'ethers'; - -/** - * A contract factory for deploying and interacting with smart contracts on the TRON network. - * - * `TronContractFactory` extends `ContractFactory` from ethers.js to provide functionalities - * specific to the TRON network. It is used for deploying smart contracts and creating contract instances - * with a given ABI and bytecode, signed by a `TronSigner`. - * - * @extends ContractFactory - * - * @constructor - * @param {ContractInterface} abi - The contract's ABI. - * @param {ethers.BytesLike} bytecode - The contract's bytecode. - * @param {TronSigner} signer - The `TronSigner` instance to sign transactions. - * @param {string} [contractName=''] - An optional name for the contract, used in TRON-specific transaction fields. - */ -export class TronContractFactory extends ContractFactory { - public default_originEnergyLimit = 1e7; - public abi: any; - - constructor( - abi: ContractInterface, - bytecode: ethers.BytesLike, - signer: TronSigner, - public readonly contractName = '' - ) { - super(abi, bytecode, signer); - this.abi = abi; - } - - /** - * Deploys a smart contract to the TRON network. - * - * This method overrides the `deploy` method from the base contract factory. However, it is not implemented - * for the Tron contract factory and will throw an error if called. Deploying contracts on the TRON network - * requires a different approach and should be handled using the `getDeployTransaction` method. - * - * @param {...any[]} args - Constructor arguments for the smart contract. - * @returns {Promise} A promise that resolves to the deployed contract instance. - * @throws {Error} Throws an error indicating that the deploy method is not implemented. - */ - override async deploy(...args: Array): Promise { - throw new Error('deploy is not implemented on Tron contract factory'); - } - - /** - * Constructs the deployment transaction for a smart contract on the TRON network. - * - * This method overrides `getDeployTransaction` from the base contract factory to construct - * a transaction specifically tailored for deploying smart contracts on the TRON network. - * It encodes the constructor arguments, sets the necessary TRON-specific fields in the transaction, - * and handles the conversion of values to match TRON's requirements. - * - * Special Considerations: - * - The `name` field of the transaction is derived from the contract's name and truncated to 32 characters. - * - TRON-specific fields like `feeLimit`, `callValue`, `userFeePercentage`, and `originEnergyLimit` are set. - * - The transaction is prepared in a format suitable for TRON, differing from standard Ethereum transactions. - * - * @param {...any[]} args - Constructor arguments for the smart contract. - * @returns {ethers.providers.TransactionRequest} A TRON-specific transaction request object for contract deployment. - */ - override getDeployTransaction( - ...args: any[] - ): ethers.providers.TransactionRequest { - const { data, value } = super.getDeployTransaction( - ...args - ) as TransactionRequest; - - const params = this.interface.encodeDeploy( - args.slice(0, this.interface.deploy.inputs.length) - ); - - const tx: CreateSmartContract = { - feeLimit: undefined, - callValue: value ? Number(value.toString()) : 0, - userFeePercentage: 100, - originEnergyLimit: this.default_originEnergyLimit, - abi: this.abi, - bytecode: strip0x(this.bytecode), - rawParameter: strip0x(params), - name: this.contractName.slice(0, 32), //contractName's length cannot be greater than 32 - data: data?.toString() ?? '', - [MethodSymbol]: TronTxMethods.CREATE, - }; - return tx; - } -} diff --git a/src/tron/provider.ts b/src/tron/provider.ts deleted file mode 100644 index 31862ed..0000000 --- a/src/tron/provider.ts +++ /dev/null @@ -1,438 +0,0 @@ -import { - ExternalProvider, - JsonRpcFetchFunc, - JsonRpcSigner, - Networkish, - TransactionReceipt, - TransactionRequest, - TransactionResponse, - Web3Provider, -} from '@ethersproject/providers'; -import { HttpNetworkConfig } from 'hardhat/types'; -import { TronSigner } from './signer'; -import { BigNumber, Wallet } from 'ethers'; -import { - Time, - TronTransactionFailedError, - TronWebError, - ensure0x, - strip0x, -} from './utils'; -import { - Deferrable, - HDNode, - isAddress, - parseTransaction, -} from 'ethers/lib/utils'; -import TronWeb from 'tronweb'; -import { Transaction, TronWebError1 } from 'tronweb/interfaces'; - -/** - * A provider for interacting with the TRON blockchain, extending the Web3Provider. - * - * `TronWeb3Provider` is designed to integrate TRON's blockchain functionalities with the Web3 interface. - * It extends the `Web3Provider` class, adapting it to work with the TRON network. - * This class manages a collection of `TronSigner` instances for transaction signing - * and provides methods for interacting with the TRON blockchain, such as sending transactions, - * estimating gas, and retrieving transaction details. - * - * Key Features: - * - Signer Management: Maintains a collection of `TronSigner` instances for different addresses. - * - Transaction Handling: Provides methods for sending transactions, estimating gas, and more. - * - TronWeb Integration: Utilizes TronWeb for direct interactions with the TRON network. - * - Configurable: Can be configured with custom network settings and HTTP headers. - * - * @extends Web3Provider - * - * @constructor - * @param {ExternalProvider | JsonRpcFetchFunc} provider - The underlying JSON-RPC provider. - * @param {HttpNetworkConfig} config - Configuration for the network, including HTTP headers and URL. - * @param {Networkish | undefined} [network] - The network configuration. - */ -export class TronWeb3Provider extends Web3Provider { - protected signers = new Map(); - public ro_tronweb: TronWeb; - public gasPrice: { time: number; value?: BigNumber } = { time: Time.NOW }; - public maxFeeLimit?: number; - public FALLBACK_MAX_FEE_LIMIT = 15e9; // 15,000 TRX; - private readonly fullHost: string; - private readonly headers: Record; - - constructor( - provider: ExternalProvider | JsonRpcFetchFunc, - config: HttpNetworkConfig, - network?: Networkish | undefined - ) { - super(provider, network); - const { httpHeaders: headers, url, accounts } = config; - let fullHost = url; - // the address of the tron node has the jsonrpc path chopped off - fullHost = fullHost.replace(/\/jsonrpc\/?$/, ''); - this.fullHost = fullHost; - this.headers = headers; - this.ro_tronweb = new TronWeb({ fullHost, headers }); - // instantiate Tron Signer - if (Array.isArray(accounts)) { - for (const pk of accounts) { - const addr = new Wallet(pk).address; - this.signers.set(addr, new TronSigner(fullHost, headers, pk, this)); - } - } else if (typeof accounts !== 'string' && 'mnemonic' in accounts) { - const hdNode = HDNode.fromMnemonic( - accounts.mnemonic, - accounts.passphrase - ); - const derivedNode = hdNode.derivePath( - `${accounts.path}/${accounts.initialIndex}` - ); - this.signers.set( - derivedNode.address, - new TronSigner(fullHost, headers, derivedNode.privateKey, this) - ); - } else { - throw new Error( - 'unable to instantiate Tron Signer, unrecognized private key' - ); - } - } - - /** - * Adds a new signer to the signer collection. - * - * This method creates and adds a new `TronSigner` instance to the signer collection using the provided private key. - * If a signer already exists for the derived address, it returns the existing signer. - * Otherwise, it creates a new `TronSigner`, adds it to the collection, and returns it. - * - * @param pk - The private key to create a new signer. - * @returns The newly added or existing `TronSigner` instance. - */ - addSigner(pk: string): TronSigner { - const addr = new Wallet(pk).address; - if (this.signers.has(addr)) return this.signers.get(addr)!; - const signer = new TronSigner(this.fullHost, this.headers, pk, this); - this.signers.set(addr, signer); - return signer; - } - - /** - * Retrieves the transaction count for an account. - * - * This method overrides the `getTransactionCount` method. Since the Tron protocol does not support - * the concept of nonces as in Ethereum, this method returns a dummy value. - * - * @returns A promise that resolves to the dummy transaction count. - */ - override async getTransactionCount(): Promise { - console.log( - 'getTransactionCount is not available in the Tron protocol, returning dummy value 1 ...' - ); - return 1; - } - - /** - * Retrieves a signer instance for a given address. - * - * This method overrides the `getSigner` method to return a signer instance - * associated with the provided address. If no signer is found for the given address, it throws an error. - * - * @template T - The type of signer to be returned, either `TronSigner` or `JsonRpcSigner`. - * @param address - The address to retrieve the signer for. - * @returns The signer instance corresponding to the given address. - * @throws Throws an error if no signer exists for the provided address. - */ - override getSigner( - address: string - ): T { - const signer = this.signers.get(address); - if (!signer) { - throw new Error(`No Tron signer exists for this address ${address}`); - } - return signer as T; - } - - /** - * Retrieves the current gas price with caching. - * - * This method overrides the `getGasPrice` method to include a caching mechanism with a 15-second TTL. - * If the cached value is recent (within 15 seconds), it returns the cached value. Otherwise, it fetches - * the current gas price from the network. If fetching fails, it defaults to a predefined energy price. - * - * @returns A promise that resolves to the current gas price as a BigNumber. - */ - override async getGasPrice(): Promise { - const DEFAULT_ENERGY_PRICE = BigNumber.from('1000'); - const { time, value } = this.gasPrice; - if (time > Time.NOW - 15 * Time.SECOND && value) return value; - const gasPrice = (await super.getGasPrice()) ?? DEFAULT_ENERGY_PRICE; - this.gasPrice = { time: Time.NOW, value: gasPrice }; - return gasPrice; - } - - /** - * Sends a signed transaction to the network. - * - * This method first checks if the signed transaction is a simple TRX transfer (send TRX transaction). - * If so, it handles the transaction through the `sendTrx` method. - * - * @param signedTransaction - The signed transaction or a promise that resolves to it. - * @returns A promise that resolves to the transaction response. - */ - override async sendTransaction( - signedTransaction: string | Promise - ): Promise { - signedTransaction = await signedTransaction; - const deser = parseTransaction(signedTransaction); - const { to, data, from, value } = deser; - - // is this a send trx transaction? - if (this.isSendTRX(to, from, data)) { - return this.sendTrx(from!, to!, value); - } - // is this a smart contract transaction? - if (await this.isSmartContractCall(to, from, data)) { - throw new Error( - 'direct smart contract call not yet implemented for Tron' - ); - } - - // otherwise don't alter behavior - return super.sendTransaction(signedTransaction); - } - - /** - * Sends TRX from one account to another. - * - * This method handles the sending of TRX tokens by creating, signing, and sending a transaction. - * It accounts for the difference in decimal places between TRX (6 decimals) and ETH (18 decimals). - * If the value is extremely large (more than 1000 TRX), it scales down the value to prevent errors. - * After sending the transaction, it waits briefly for the transaction to be processed. - * - * @param from - The address to send TRX from. - * @param to - The address to send TRX to. - * @param value - The amount of TRX to send, as a BigNumber. - * @returns A promise that resolves to the transaction response. - * @throws Throws an error if the transaction fails. - */ - async sendTrx( - from: string, - to: string, - value: BigNumber - ): Promise { - if (value.gt(10 ** 9)) value = value.div(10 ** 12); - const unsignedTx = await this.ro_tronweb.transactionBuilder.sendTrx( - this.ro_tronweb.address.toHex(to), - Math.floor(value.toNumber()), - this.ro_tronweb.address.toHex(from) - ); - const signedTx = await this.getSigner(from).sign(unsignedTx); - return this.sendRawTransaction(signedTx); - } - - /** - * Triggers a function call on a specified smart contract in the Tron network. - * - * This method constructs a transaction to call a function of a smart contract. It requires - * the sender's address, the contract address, the function signature, parameters for the function, - * and an options object which may include a gas limit and an optional value to send with the transaction. - * The fee limit for the transaction is determined using the sender's signer. The transaction - * is then signed and sent to the Tron network. - * - * @param from - The address of the sender initiating the contract call. - * @param contract - The address of the smart contract to interact with. - * @param funcSig - The function signature to call in the smart contract. - * @param params - An array of parameters for the function call, each with a type and value. - * @param options - An object containing optional parameters. - * @returns A promise that resolves to a `TransactionResponse` object representing the result of the transaction. - */ - async triggerSmartContract( - from: string, - contract: string, - funcSig: string, - params: { type: string; value: string | number }[], - options: { - gasLimit?: string | number | BigNumber; - value?: string | BigNumber; - } - ) { - const feeLimit = await this.getSigner(from).getFeeLimit( - { to: contract }, - options - ); - const { transaction } = - await this.ro_tronweb.transactionBuilder.triggerSmartContract( - this.ro_tronweb.address.toHex(contract), - funcSig, - { feeLimit, callValue: options.value?.toString() ?? 0 }, - params, - this.ro_tronweb.address.toHex(from) - ); - const signedTx = await this.getSigner(from).sign(transaction); - return this.sendRawTransaction(signedTx); - } - - /** - * Sends a raw transaction to the Tron network and returns the transaction response. - * - * This method accepts a raw transaction object, sends it to the Tron network, and waits - * for the transaction to be acknowledged. After the transaction is acknowledged, it retrieves - * and returns the transaction response. If the transaction fails at any stage, the method - * throws an error. - * - * @param transaction - The raw transaction object to be sent to the network. - * @returns A promise that resolves to a `TransactionResponse` object, which includes details of the processed transaction. - * @throws `TronWebError` - If the transaction fails to be sent or acknowledged by the network. - * - */ - async sendRawTransaction( - transaction: Transaction - ): Promise { - const response = await this.ro_tronweb.trx.sendRawTransaction(transaction); - if (!('result' in response) || !response.result) { - throw new TronWebError(response as TronWebError1); - } - console.log('\nTron transaction broadcast, waiting for response...'); - const txRes = await this.getTransactionWithRetry(response.txid); - txRes.wait = this._buildWait(txRes.confirmations, response.txid); - return txRes; - } - - /** - * Creates a function that waits for a specified number of confirmations of a transaction. - * - * This method generates a function that, when called, will continuously check for the number of confirmations - * of a given transaction until it reaches the specified target. It checks the transaction status every second. - * If the transaction is found to have failed (status 0), a `TronTransactionFailedError` is thrown. - * - * @param initialConfirmations - The initial number of confirmations at the time of this method call. - * @param hash - The hash of the transaction to wait for. - * @returns A function that takes `targetConfirmations` and returns a promise that resolves to the transaction receipt. - */ - private _buildWait(initialConfirmations: number, hash: string) { - return async ( - targetConfirmations?: number - ): Promise => { - let curr_conf = initialConfirmations; - while (targetConfirmations && curr_conf < targetConfirmations) { - await Time.sleep(Time.SECOND); // sleep 1 sec - const { confirmations: latest_conf } = - await this.getTransactionWithRetry(hash, 3); - curr_conf = latest_conf; - } - const receipt = await this.getTransactionReceipt(ensure0x(hash)); - const { status } = receipt; - if (status === 0) { - throw new TronTransactionFailedError(receipt); - } - return receipt; - }; - } - - /** - * Attempts to retrieve a transaction response from the jsonrpc node using the hash, with a retry mechanism. - * - * This method tries to get a transaction by its hash. If the initial attempt fails, it retries - * the operation, up to a specified number of times. Between each retry, the method waits for - * a period that increases linearly, with an additional random jitter to avoid simultaneous - * retry spikes. This approach is useful for handling transient network issues, or the sync delay that can happen between - * a Tron fullNode and its rpc node - * - * @param hash The hash of the transaction to retrieve. - * @param retries The maximum number of attempts to retrieve the transaction. Defaults to 10. - * @returns A promise that resolves to the transaction response. - */ - public async getTransactionWithRetry( - hash: string, - retries = 10 - ): Promise { - for (let i = 1; i < retries; i++) { - try { - const response = await this.getTransaction(ensure0x(hash)); // can return null! - if (response == null) throw ''; - return response; - } catch (error) {} - // Linear backoff with jitter - const jitter = Math.floor(Math.random() * 300); - await Time.sleep(Time.SECOND + jitter); - } - return await this.getTransaction(ensure0x(hash)); - } - - /** - * Estimates the gas required for a transaction on the TRON network. - * - * This method overrides the `estimateGas` method to accommodate TRON's [specific requirements](https://developers.tron.network/reference/eth_estimategas). - * TRON does not support EIP-1559 transactions and nonces, so related fields are removed from the transaction object. - * It then calls the superclass's `estimateGas` method for the actual estimation. - * - * @param transaction - The transaction object to estimate gas for. - * @returns A promise that resolves to the estimated gas as a BigNumber. - */ - override async estimateGas( - transaction: Deferrable - ): Promise { - const toDel = ['type', 'maxFeePerGas', 'maxPriorityFeePerGas', 'nonce']; - for (const field of toDel) { - delete (transaction as { [key: string]: any })[field]; - } - return super.estimateGas(transaction); - } - - /** - * Checks if a given transaction is a smart contract call. - * - * This method examines the `to`, `from`, and `data` fields of a transaction - * to determine if it is likely a call to a smart contract. It considers a transaction - * as a smart contract call if all fields are defined, the addresses are valid, - * the data field has a significant length, and there is associated contract code. - * - * @param to - The recipient address of the transaction. - * @param from - The sender address of the transaction. - * @param data - The data payload of the transaction. - * @returns A promise that resolves to `true` if the transaction is a smart contract call, otherwise `false`. - */ - async isSmartContractCall( - to?: string, - from?: string, - data?: string - ): Promise { - if ([to, from, data].some((f) => f == undefined)) return false; - if ([to, from].some((f) => isAddress(f!) == false)) return false; - if (data!.length <= 2) return false; - const contractCode = await this.getCode(to!); - return contractCode != undefined && strip0x(contractCode).length > 0; - } - - /** - * Determines if a transaction is a TRX (transfer) operation. - * - * This method checks if the provided `to`, `from`, and `data` fields - * of a transaction suggest a TRX operation. It considers a transaction as - * a TRX operation if the `to` and `from` fields are defined and the `data` field - * is either not present or equals '0x'. - * - * @param to - The recipient address of the transaction. - * @param from - The sender address of the transaction. - * @param data - The data payload of the transaction. - * @returns `true` if the transaction is likely a TRX operation, otherwise `false`. - */ - isSendTRX(to?: string, from?: string, data?: string): boolean { - if ([to, from].some((f) => f == undefined)) return false; - return !data || data == '0x'; - } - - /** - * Asynchronously retrieves and caches the maximum fee limit from the chain parameters. - * If the parameter is not found, a predefined fallback value is used. - * The value is cached for future calls to this method. - * - * @returns {Promise} A promise that resolves with the cached or newly retrieved maximum fee limit. - */ - async getMaxFeeLimit(): Promise { - if (this.maxFeeLimit == undefined) { - const params = await this.ro_tronweb.trx.getChainParameters(); - const param = params.find(({ key }) => key === 'getMaxFeeLimit'); - this.maxFeeLimit = param?.value ?? this.FALLBACK_MAX_FEE_LIMIT; - } - return this.maxFeeLimit; - } -} diff --git a/src/tron/signer.ts b/src/tron/signer.ts deleted file mode 100644 index da6a7bb..0000000 --- a/src/tron/signer.ts +++ /dev/null @@ -1,288 +0,0 @@ -/** Tron Lingo - * gasLimit in EVM == energyConsumption in TVM - * gasPrice in EVM == energyPrice in TVM - */ - -import { BigNumber, Wallet } from 'ethers'; -import { Deferrable } from 'ethers/lib/utils'; -import TronWeb from 'tronweb'; -import { TronWeb3Provider } from './provider'; -import { Time, TronWebGetTransactionError, strip0x } from './utils'; -import { CreateSmartContract, MethodSymbol, TronTxMethods } from './types'; -import { - BlockTransaction, - ContractExecutionParams, - Transaction, -} from 'tronweb/interfaces'; -import { - TransactionRequest, - TransactionResponse, -} from '@ethersproject/providers'; - -/** - * Represents a signer for TRON blockchain transactions. - * - * `TronSigner` extends the `Wallet` class and integrates with TronWeb to handle TRON-specific - * transaction signing and interaction. It includes functionality for managing gas prices, - * energy factors, and other TRON-specific transaction parameters. - * - * Properties: - * - `tronweb`: Instance of TronWeb for interacting with the TRON network. - * - `gasPrice`: Object to store gas price data with a timestamp. - * - `energyFactors`: Map to store and manage energy factors for different contracts. - * - `MAX_ENERGY_FACTOR`: Maximum energy factor, used in calculating transaction fees. - * - `MAX_ENERGY_DIVISOR`: A workaround divisor for handling BigNumber calculations. - * - * @extends Wallet - * - * @constructor - * @param {string} fullHost - The full host URL for the TRON network. - * @param {Record} headers - Headers for network requests. - * @param {string} privateKey - The private key for the signer. - * @param {TronWeb3Provider} provider - The provider for the TRON network. - */ -export class TronSigner extends Wallet { - protected tronweb: TronWeb; - public gasPrice: { time: number; value?: BigNumber } = { time: Time.NOW }; - public energyFactors = new Map(); - public MAX_ENERGY_FACTOR = 1.2; - public MAX_ENERGY_DIVISOR = 1000; - - constructor( - fullHost: string, - headers: Record, - privateKey: string, - provider: TronWeb3Provider - ) { - super(privateKey, provider); - this.tronweb = new TronWeb({ - fullHost, - headers, - privateKey: strip0x(privateKey), - }); - } - - /** - * Signs a transaction using a private key. - * - * This function signs a given transaction using the provided private key. - * If no private key is specified, it uses the default private key - * with which the TronSigner was instantiated. - * - * @param {Record | Transaction} unsignedTx - The transaction object to be signed. - * @param {string} [privateKey] - The private key to sign the transaction with. If not provided, the default private key of the TronSigner instance is used. - * @returns {Promise} A promise that resolves to the signed transaction. - */ - async sign( - unsignedTx: Record | Transaction, - privateKey?: string - ): Promise { - return this.tronweb.trx.sign(unsignedTx, privateKey); - } - - /** - * Sends a transaction to the TRON network, handling specific transaction types. - * - * This function overrides the base `sendTransaction` method from ethers.js wallet. - * It checks if the transaction is a TRON-specific transaction (identified by the 'method' property). - * If it is a standard Ethereum transaction, it calls the superclass implementation. For TRON-specific - * transactions, it handles them based on the specified method (e.g., contract creation). - * - * @param {CreateSmartContract | Deferrable} transaction - The transaction object, which can be a TRON smart contract creation or a standard Ethereum transaction. - * @returns {Promise} A promise that resolves to the transaction response. - * @throws {Error} Throws an error if the transaction method is not implemented. - */ - override async sendTransaction( - transaction: CreateSmartContract | Deferrable - ): Promise { - if (!(MethodSymbol in transaction)) { - return super.sendTransaction(transaction); - } - switch ((transaction as CreateSmartContract)[MethodSymbol]) { - case TronTxMethods.CREATE: - return this.create(transaction as CreateSmartContract); - default: - throw new Error('sendTransaction method not implemented'); - } - } - - /** - * Create a smart contract on the TRON network. - * - * This function handles the creation, signing, and submission of a smart contract. - * It first constructs an unsigned transaction, then signs it and sends it to the network. - * After sending the transaction, it waits briefly for the JSON-RPC node to become aware of it. - * If the transaction fails at any point, a `TronWebError` is thrown. - * - * @param {CreateSmartContract} transaction - The smart contract transaction object. - * @returns {Promise} A promise that resolves to the transaction response. - * @throws {TronWebError} Throws an error if the transaction submission fails. - */ - async create( - transaction: ContractExecutionParams & Partial - ): Promise { - delete transaction[MethodSymbol]; - delete transaction.data; - - const unsignedTx = - await this.tronweb.transactionBuilder.createSmartContract( - transaction, - this.tronweb.address.toHex(this.address) - ); - - const signedTx = await this.sign(unsignedTx); - return (this.provider as TronWeb3Provider).sendRawTransaction(signedTx); - } - - /** - * Calculates the FeeLimit for a TRON contract transaction. - * - * The FeeLimit is computed based on the estimated basic energy consumption, - * the energy factor (or max energy factor) of the contract, and the current energy price. - * In any case the feeLimit is capped at the value of MAX_FEE_LIMIT - * - * Calculation Formulas: - * - Tight FeeLimit = Basic Energy Consumption * (1 + Energy Factor) * Energy Price - * - Loose FeeLimit = Basic Energy Consumption * (1 + Max Energy Factor) * Energy Price - * - * References: - * - [Determining the FeeLimit](https://developers.tron.network/docs/set-feelimit#how-to-determine-the-feelimit-parameter) - * - [Contract Energy Factor](https://developers.tron.network/reference/getcontractinfo) - * - [Dynamic Energy Model](https://developers.tron.network/docs/resource-model#dynamic-energy-model) - * - * @param {Record} unsignedTx - The unsigned transaction object. - * @param {Record} [overrides] - Optional overrides, such as gasLimit. - * @returns {Promise} The calculated FeeLimit as a number. - */ - async getFeeLimit( - unsignedTx: Record, - overrides?: Record - ): Promise { - const contract_address = unsignedTx.to ?? ''; - const data = unsignedTx.data; - const factor = 1 + (await this.getEnergyFactor(contract_address)); - const factor_adj = BigNumber.from( - Math.floor(factor * this.MAX_ENERGY_DIVISOR) - ); - let energy_consumption: BigNumber; - if (overrides?.gasLimit) { - energy_consumption = BigNumber.from(overrides?.gasLimit.toString()); - } else { - energy_consumption = await this.getEnergyConsumption( - contract_address, - data - ); - } - const enegyPrice = await this.getEnergyPrice(); - const feeLimit = energy_consumption - .mul(enegyPrice) - .mul(factor_adj) - .div(this.MAX_ENERGY_DIVISOR); - const maxFeeLimit = await ( - this.provider as TronWeb3Provider - ).getMaxFeeLimit(); - if (feeLimit.gt(BigNumber.from(maxFeeLimit))) { - return maxFeeLimit; - } - return feeLimit.toNumber(); - } - - /** - * Retrieves the current energy price from the network. - * - * This function is an alias for `getGasPrice` and returns the current gas price - * from the blockchain network, expressed as a BigNumber. This is useful for - * estimating transaction costs in terms of energy. - * - * @returns {Promise} A promise that resolves to the current energy price as a BigNumber. - */ - getEnergyPrice = (): Promise => this.getGasPrice(); - - /** - * Retrieves the current gas price from the network provider. - * - * This function fetches the current gas price from the blockchain network provider. - * - * @returns {Promise} A promise that resolves to the current gas price as a BigNumber. - */ - override async getGasPrice(): Promise { - return this.provider.getGasPrice(); - } - - /** - * Estimates the energy consumption for executing a transaction on a given contract. - * - * This function estimates the gas (energy) required for a transaction with specified data - * on a given contract address in the TRON network. It uses the `estimateGas` method - * to calculate this. The contract address provided should have the "41" prefix that Tron appends to addresses stripped, - * - * @param {string} contract_address - The address of the contract on which the transaction will be executed. - * @param {string} data - The data (payload) of the transaction. - * @returns {Promise} A promise that resolves to the estimated gas (energy) consumption as a BigNumber. - */ - async getEnergyConsumption( - contract_address: string, - data: string - ): Promise { - const gasLimit = await this.estimateGas({ - to: contract_address, - data, - }); - return gasLimit; - } - - /** - * Retrieves the energy factor for a specified contract address from the TRON network. - * - * This function fetches the energy factor, caching it with a 10-minute TTL to optimize performance. - * The energy factor is updated by Tron every 6 hours. If the contract does not exist (e.g., for a create transaction), - * the maximum energy factor is returned. The function ensures that the retrieved energy factor is a sensible value. - * - * @param {string} contract_address - The address of the contract for which to retrieve the energy factor. - * @returns {Promise} A promise that resolves to the energy factor of the contract. - */ - async getEnergyFactor(contract_address: string): Promise { - const cached = this.energyFactors.get(contract_address); - if (cached && cached.time > Time.NOW - 10 * Time.MINUTE) { - return cached.value; - } - let energy_factor = this.MAX_ENERGY_FACTOR; - if (contract_address == '') return energy_factor; - const res = await this.tronweb.fullNode.request( - 'wallet/getcontractinfo', - { value: contract_address, visible: false }, - 'post' - ); - - // check it's a sensible value - if (res?.contract_state?.energy_factor < this.MAX_ENERGY_FACTOR) { - energy_factor = Number(res?.contract_state?.energy_factor); - } - this.energyFactors.set(contract_address, { - time: Time.NOW, - value: energy_factor, - }); - return energy_factor; - } - - /** - * Retrieves transaction details from the TRON network for a given transaction hash. - * - * This function uses TronWeb to fetch the transaction details. It handles the - * inconsistency in error reporting by TronWeb by explicitly checking for an 'Error' - * key in the response. If an error is detected, a `TronWebGetTransactionError` is thrown. - * - * @param {string} hash - The hash of the transaction to be retrieved. - * @returns {Promise} A promise that resolves to the transaction details. - * @throws {TronWebGetTransactionError} Throws this error if TronWeb reports an error in the transaction fetch. - */ - async getTronWebTransaction(hash: string): Promise { - const res = await this.tronweb.trx.getTransaction(hash); - if ('Error' in res) throw new TronWebGetTransactionError(res); - return res; - } - - getTronWeb() { - return this.tronweb; - } -} diff --git a/src/tron/solc.ts b/src/tron/solc.ts deleted file mode 100644 index 4212566..0000000 --- a/src/tron/solc.ts +++ /dev/null @@ -1,190 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import * as path from 'path'; -import { constants, promises as fsPromises } from 'fs'; -import fetch from 'node-fetch'; -import { createWriteStream } from 'fs'; -import { pipeline } from 'stream'; -import { promisify } from 'util'; - -const streamPipeline = promisify(pipeline); - -async function downloadFile(url: string, dest: string): Promise { - try { - const response = await fetch(url); - if (!response.ok) { - throw new Error(`network error: ${response.statusText}`); - } - await streamPipeline(response.body as any, createWriteStream(dest)); - console.log(`download ${url} to ${dest} success`); - } catch (error) { - console.error('download failed', error); - } -} - -async function checkFileExists(filePath: string): Promise { - try { - await fsPromises.access(filePath, constants.F_OK); - return true; - } catch (error) { - return false; - } -} - -export async function loadTronSolc(solcVersion: string) { - let compilerPath = ''; - let compilerRemotePath = ''; - let longVersion = ''; - - if (solcVersion == '0.8.25') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.8.25/soljson.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.8.25.js'); - longVersion = '0.8.25'; - } else if (solcVersion == '0.8.23') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.8.23/soljson.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.8.23.js'); - longVersion = '0.8.23'; - } else if (solcVersion == '0.8.22') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.8.22/soljson.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.8.22.js'); - longVersion = '0.8.22'; - } else if (solcVersion == '0.8.21') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.8.21/soljson.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.8.21.js'); - longVersion = '0.8.21'; - } else if (solcVersion == '0.8.20') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.8.20/soljson.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.8.20.js'); - longVersion = '0.8.20'; - } else if (solcVersion == '0.8.18') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.8.18/soljson.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.8.18.js'); - longVersion = '0.8.18'; - } else if (solcVersion == '0.8.11') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.8.11/solidity-js_0.8.11_Rousseau_v4.4.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.8.11.js'); - longVersion = '0.8.11'; - } else if (solcVersion == '0.8.7') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.8.7/solidity-js_0.8.7_Rousseau_v4.4.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.8.7.js'); - longVersion = '0.8.7'; - } else if (solcVersion == '0.8.6') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.8.6/solidity-js_0.8.6_Bacon_v4.3.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.8.6.js'); - longVersion = '0.8.6'; - } else if (solcVersion == '0.7.7') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.7.7/solidity-js_0.7.7_Bacon_v4.3.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.7.7.js'); - longVersion = '0.7.7'; - } else if (solcVersion == '0.6.13') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.6.13/solidity-js_0.6.13_Bacon_v4.3.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.6.13.js'); - longVersion = '0.6.13'; - } else if (solcVersion == '0.5.18') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.5.18/solidity-js_0.5.18_Bacon_v4.3.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.5.18.js'); - longVersion = '0.5.18'; - } else if (solcVersion == '0.8.0') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.8.0/solidity-js_0.8.0_Plato_v4.2.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.8.0.js'); - longVersion = '0.8.0'; - } else if (solcVersion == '0.7.6') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.7.6/solidity-js_0.7.6_Plato_v4.2.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.7.6.js'); - longVersion = '0.7.6'; - } else if (solcVersion == '0.7.0') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.7.0/solidity-js_0.7.0_Plato_v4.2.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.7.0.js'); - longVersion = '0.7.0'; - } else if (solcVersion == '0.6.12') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.6.12/solidity-js_0.6.12_Plato_v4.2.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.6.12.js'); - longVersion = '0.6.12'; - } else if (solcVersion == '0.6.8') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.6.8/solidity-js_0.6.8_Plato_v4.2.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.6.8.js'); - longVersion = '0.6.8'; - } else if (solcVersion == '0.6.2') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.6.2/solidity-js_0.6.2_Plato_v4.2.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.6.2.js'); - longVersion = '0.6.2'; - } else if (solcVersion == '0.5.17') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.5.17/solidity-js_0.5.17_Plato_v4.2.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.5.17.js'); - longVersion = '0.5.17'; - } else if (solcVersion == '0.5.16') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.5.16/solidity-js_0.5.16_GreatVoyage_v4.1.2.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.5.16.js'); - longVersion = '0.5.16'; - } else if (solcVersion == '0.6.0') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.6.0/solidity-js_0.6.0_GreatVoyage_v4.1.2.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.6.0.js'); - longVersion = '0.6.0'; - } else if (solcVersion == '0.5.15') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.5.15/solidity-js_0.5.15_GreatVoyage_v4.1.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.5.15.js'); - longVersion = '0.5.15'; - } else if (solcVersion == '0.5.14') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.5.14/solidity-js_0.5.14_GreatVoyage_v4.1.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.5.14.js'); - longVersion = '0.5.14'; - } else if (solcVersion == '0.5.12') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.5.12/solidity-js_0.5.12_GreatVoyage_v4.0.1.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.5.12.js'); - longVersion = '0.5.12'; - } else if (solcVersion == '0.5.8') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.5.8/soljson.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.5.8.js'); - longVersion = '0.5.8'; - } else if (solcVersion == '0.5.4') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/tv_0.5.4/tron-solidity-0.5.4_Odyssey_v3.6.0.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.5.4.js'); - longVersion = '0.5.4'; - } else if (solcVersion == '0.4.25') { - compilerRemotePath = - 'https://github.com/tronprotocol/solidity/releases/download/0.4.25_Odyssey_v3.2.3/tron-solidity-0.4.25_Odyssey_v3.2.3.js'; - compilerPath = path.join(__dirname, 'soljson-tv_0.4.25.js'); - longVersion = '0.4.25'; - } else { - throw new Error(`unkown solcVersion = ${solcVersion}`); - } - - const needDownload = !(await checkFileExists(compilerPath)); - if (needDownload) { - await downloadFile(compilerRemotePath, compilerPath); - } - - return { - compilerPath, - isSolcJs: true, // if you are using a native compiler, set this to false - version: solcVersion, - // This is used as extra information in the build-info files, - // but other than that is not important - longVersion: longVersion, - }; -} diff --git a/src/tron/tronweb.d.ts b/src/tron/tronweb.d.ts deleted file mode 100644 index 1ec60ef..0000000 --- a/src/tron/tronweb.d.ts +++ /dev/null @@ -1,1132 +0,0 @@ -/** - * Types and interfaces below are based on @daochild/tronweb-typescript@1.1.0 - * Original Source: https://github.com/daochild/tronweb-typescript - */ -declare module 'tronweb' { - import { BigNumber } from 'bignumber.js'; - import { - Account, - AccountMnemonic, - AssetTRC10, - AssetUpdate, - BlockInfo, - BlockInput, - BlockTransaction, - BytesLike, - ChainParameter, - ContractExecutionParams, - CreateRandomOptions, - DelegatedResourceAccount, - DelegatedResourceList, - EnergyEstimate, - EventResult, - Exchange, - Header, - HexString, - JsonFragment, - KeyValue, - Miner, - NodeInfo, - Proposal, - RawTransactionResult, - Resource, - SideOptions, - TokenInfo, - Transaction, - TransactionResult, - TriggerConstantContractResult, - TronAccountResource, - TronContract, - TronContractResult, - TronWebConstructor, - TronWebError1, - TronWebError2, - TrxAccount, - } from 'tronweb/interfaces'; - - export class TronWeb { - address: address; - transactionBuilder: transactionBuilder; - trx: trx; - utils: utils; - constructor( - fullNode: string, - solidityNode: string, - eventServer: string | boolean, - privateKey?: string | boolean - ); - constructor( - fullNode: string, - solidityNode: string, - eventServer: string | boolean, - sideOptions: SideOptions, - privateKey?: string | boolean - ); - constructor(obj: TronWebConstructor); - contract(data: JsonFragment[], address: string): TronContract; - setHeader(header: Header): void | Error; - currentProvider(): any; - currentProviders(): any; - getEventByTransactionID(transactionID: string): Promise; - getEventResult( - contractAddress: string, - options?: Record - ): Promise; // check this return - isConnected(): Record; - isValidProvider(provider: any): any; - setAddress(address: string): void | Error; - setDefaultBlock(blockID?: BlockInput): void | string | boolean; - setEventServer(eventServer: any): void | Error; - setFullNode(fullNode: any): void | Error; - setPrivateKey(privateKey: string): void | Error; - setSolidityNode(solidityNode: any): void | Error; - createAccount(): Promise; - createRandom(options?: CreateRandomOptions): Promise; - fromAscii(string: any, padding: any): any; - fromDecimal(value: number | string): string; - fromSun(sun: string | number): string; - fromUtf8(string: string): string; - fromMnemonic( - mnemonic: string, - path?: string, - wordlist?: string - ): AccountMnemonic | Error; - isAddress(address: string): boolean; - sha3(string: string, prefix?: boolean): HexString; - toAscii(hex: HexString): string; - toBigNumber( - amount: number | string | HexString - ): BigNumber | Record; - toDecimal(value: string | HexString): number | string; - toHex( - val: string | number | Record | [] | BigNumber - ): HexString; - toSun(trx: number): string; - toUtf8(hex: string): string; - BigNumber(val: number | string | HexString): BigNumber; - feeLimit: number; - defaultAddress: { - hex: boolean | string; - base58: boolean | string; - }; - fullNode: any; - } - // export interface TronWeb { - // } - - export class transactionBuilder { - addUpdateData( - unsignedTransaction: JSON | Record, - memo: string - ): Promise>; - applyForSR( - address: string, - url: string, - options?: number - ): Promise>; - createAccount( - address: string, - options?: JSON | Record - ): Promise>; - createAsset( - options: AssetTRC10, - issuerAddress: string - ): Promise>; - createProposal( - parameters: KeyValue[], - issuerAddress: string, - options?: number - ): Promise>; - createSmartContract( - options: ContractExecutionParams, - issuerAddress: string - ): Promise>; - createToken( - options: AssetTRC10, - issuerAddress: string - ): Promise>; - delegateResource( - amount: number, - receiverAddress: string, - resource: string, - address: string, - lock: boolean, - options?: Record - ): Promise>; - deleteProposal( - proposalID: number, - issuerAddress: string, - options?: number - ): Promise>; - estimateEnergy( - contractAddress: string | HexString, - functionSelector: string, - options: Record, - parameter: any[], - issuerAddress: string | HexString - ): Promise; - extendExpiration( - transaction: Transaction | JSON | Record, - extension: number - ): Promise; - freezeBalance( - amount: number, - duration: number, - resource: Resource, - ownerAddress: string, - receiverAddress: string, - options?: number - ): Promise; - freezeBalanceV2( - amount: number, - resource: Resource, - ownerAddress: string, - options?: Record - ): Promise>; - injectExchangeTokens( - exchangeID: number, - tokenID: string, - tokenAmount: number, - ownerAddress: string, - options?: number - ): Promise; - purchaseAsset( - issuerAddress: string, - tokenID: string, - amount: number, - buyer?: string, - options?: number - ): Promise>; - purchaseToken( - issuerAddress: string, - tokenID: string, - amount: number, - buyer?: string, - options?: number - ): Promise>; - sendAsset( - to: string, - amount: number, - tokenID: string, - from: string, - options: number - ): Promise>; - sendToken( - to: string, - amount: number | string, - tokenID: string, - pk?: string - ): Promise>; - sendTrx( - to: string, - amount: number, - from: string, - options?: number - ): Promise; - tradeExchangeTokens( - exchangeID: number, - tokenID: string, - tokenAmountSold: number, - tokenAmountExpected: number, - ownerAddress: string, - options: number - ): Promise>; - triggerConfirmedConstantContract( - contractAddress: string, - functions: string, - options: Record, - parameter: any[], - issuerAddress: string - ): Promise>; - triggerConstantContract( - contractAddress: string, - functions: string, - options: Record, - parameter: any[], - issuerAddress: string - ): Promise>; - triggerSmartContract( - contractAddress: string, - functions: string, - options: Record, - parameter: any[], - issuerAddress: string - ): Promise; - undelegateResource( - amount: number, - receiverAddress: string, - resource: string, - address: string, - options?: Record - ): Promise>; - unfreezeBalance( - resource: Resource, - address: string, - receiver: string, - options: number - ): Promise>; - unfreezeBalanceV2( - amount: number, - resource: Resource, - address: string, - options: Record - ): Promise>; - updateSetting( - contract_address: string, - consume_user_resource_percent: number, - owner_address: string, - options: number - ): Promise>; - updateAccountPermissions( - owner_address: string, - ownerPermissions: Record, - witnessPermissions: Record | null, - activesPermissions: Record[] - ): Promise>; - updateAsset( - options: AssetUpdate, - issuerAddress: string - ): Promise>; - updateBrokerage( - brokerage: number, - ownerAddress: string - ): Promise>; - updateEnergyLimit( - contract_address: string, - origin_energy_limit: number, - owner_address: string, - options: number - ): Promise>; - updateToken( - options: AssetUpdate, - issuerAddress: string - ): Promise>; - vote( - votes: Record, - voterAddress: string, - option: number - ): Promise>; - voteProposal( - proposalID: number, - hasApproval: string, - voterAddress: string, - options: number - ): Promise>; - withdrawBlockRewards( - address: string, - options: number - ): Promise>; - withdrawExchangeTokens( - exchangeID: number, - tokenID: string, - tokenAmount: number, - ownerAddress: string, - options: number - ): Promise>; - withdrawExpireUnfreeze(address: string): Promise>; - } - export class trx { - getAccount(address: HexString | string): Promise; - getAccountResources( - address: HexString | string - ): Promise; - getApprovedList(r: Transaction): Promise; - getAvailableUnfreezeCount( - address: string | HexString, - options?: Record - ): Promise>; - getBalance(address: string | HexString): Promise; - getBandwidth(address: string | HexString): Promise>; - getBlock(block?: number | string): Promise; - getBlockByHash(blockHash: string): Promise; - getBlockByNumber(blockID: number): Promise; - getBlockRange(start: number, end: number): Promise; - getBlockTransactionCount( - block: number | string - ): Promise | number>; - getBrokerage(address: string | HexString): Promise; - getCanDelegatedMaxSize( - address: string | HexString, - resource?: Resource, - options?: Record - ): Promise>; - getCanWithdrawUnfreezeAmount( - address: string | HexString, - timestamp?: number, - options?: Record - ): Promise>; - getChainParameters(): Promise; - getConfirmedTransaction( - transactionID: string - ): Promise>; - getContract( - contractAddress: string | HexString - ): Promise>; - getCurrentBlock(): Promise; - getDelegatedResourceV2( - fromAddress: string | HexString, - toAddress: string | HexString, - options?: Record - ): Promise>; - getDelegatedResourceAccountIndexV2( - address: string | HexString, - options?: Record - ): Promise>; - getExchangeByID( - exchangeID: number - ): Promise>; - getNodeInfo(): Promise>; - getReward(address: string | HexString): Promise; - getSignWeight( - tx: Transaction - ): Promise>; - getTokenByID( - tknID: string | number - ): Promise>; - getTokenFromID(tokenID: string | number): Promise; - getTokenListByName( - name: string - ): Promise[]>; - getTokensIssuedByAddress( - address: string | HexString - ): Promise>; - getTransaction( - transactionID: string - ): Promise; - getTransactionFromBlock( - block: number | string, - index: number - ): Promise< - | BlockTransaction[] - | Record[] - | BlockTransaction - | Record - >; - getTransactionInfo( - transactionID: string - ): Promise>; - getUnconfirmedBalance(address: string): Promise; - getUnconfirmedBrokerage(address: string): Promise; - getUnconfirmedReward(address: string): Promise; - getUnconfirmedTransactionInfo( - txid: string - ): Promise>; - listExchanges(): Promise[]>; - listExchangesPaginated( - limit: number, - offset: number - ): Promise[]>; - listNodes(): Promise>; - listProposals(): Promise< - Proposal[] | Record[] | Record - >; - listSuperRepresentatives(): Promise[]>; - listTokens( - limit?: number, - offset?: number - ): Promise[]>; - sendRawTransaction( - signedTransaction: JSON | Record | Transaction, - options?: any - ): Promise; - sendHexTransaction( - signedHexTransaction: string | HexString - ): Promise>; - sendToken( - to: string, - amount: number, - tokenID: string, - from: string, - options: number - ): Promise>; - sendTransaction( - to: string, - amount: number, - pk?: string - ): Promise>; - sign( - transaction: Record | Transaction, - privateKey?: string - ): Promise; - sign(str: string, privateKey: string): Promise; - signMessageV2(msg: string | BytesLike, privateKey: string): Promise; - timeUntilNextVoteCycle(): Promise; - multiSign( - tx: JSON | Record, - pk: string, - permissionId: number - ): Promise>; - verifyMessage( - message: string | HexString, - signature: string, - address: string - ): Promise; - verifyMessageV2( - message: string | HexString, - signature: string - ): Promise; - _signTypedData( - domain: JSON | Record, - types: JSON | Record, - value: JSON | Record, - privateKey: string - ): Promise; - verifyTypedData( - domain: JSON | Record, - types: JSON | Record, - value: JSON | Record, - signature: string, - address: string - ): Promise; - } - export class address { - fromHex(hex: string): string; - fromPrivateKey(pk: string): string; - toHex(base58: string): string; - } - export class utils { - transaction: { - txJsonToPb(tx: JSON | Record): Record; - txPbToTxID(tx: JSON | Record): string; - }; - } - export default TronWeb; -} - -declare module 'tronweb/interfaces' { - /** - * A string which is prefixed with ``0x`` and followed by any number - * of case-agnostic hexadecimal characters. - * - * It must match the regular expression ``/0x[0-9A-Fa-f]*\/``. - */ - export type HexString = string; - - /** - * A [[HexString]] whose length is even, which ensures it is a valid - * representation of binary data. - */ - export type DataHexString = string; - - /** - * An object that can be used to represent binary data. - */ - export type BytesLike = DataHexString | Uint8Array; - - /** - * About frgaments... - * - * @_subsection api/abi/abi-coder:Fragments [about-fragments] - */ - /** - * A type description in a JSON API. - */ - export interface JsonFragmentType { - /** - * The parameter name. - */ - readonly name?: string; - /** - * If the parameter is indexed. - */ - readonly indexed?: boolean; - /** - * The type of the parameter. - */ - readonly type?: string; - /** - * The internal Solidity type. - */ - readonly internalType?: string; - /** - * The components for a tuple. - */ - readonly components?: ReadonlyArray; - } - - /** - * A fragment for a method, event or error in a JSON API. - */ - export interface JsonFragment { - /** - * The name of the error, event, function, etc. - */ - readonly name?: string; - - /** - * The type of the fragment (e.g. ``event``, ``"function"``, etc.) - */ - readonly type?: string; - - /** - * If the event is anonymous. - */ - readonly anonymous?: boolean; - - /** - * If the function is payable. - */ - readonly payable?: boolean; - - /** - * If the function is constant. - */ - readonly constant?: boolean; - - /** - * The mutability state of the function. - */ - readonly stateMutability?: string; - - /** - * The input parameters. - */ - readonly inputs?: ReadonlyArray; - - /** - * The output parameters. - */ - readonly outputs?: ReadonlyArray; - - /** - * The gas limit to use when sending a transaction for this function. - */ - readonly gas?: string; - } - - export type Resource = 'BANDWIDTH' | 'ENERGY'; - - export type BlockInput = 'latest' | 'earliest' | number; - - export interface Account { - address: { - base58: string; - hex: string; - }; - privateKey: string; - publicKey: string; - __proto__: Record; - } - - export interface AccountMnemonic { - mnemonic: { - phrase: string; - path: string; - locale: string; - }; - privateKey: string; - publicKey: string; - address: string; - } - - export interface CreateRandomOptions { - path: string; - extraEntropy: string; - locale: string; - } - - export interface Transaction { - block: number; - timestamp: number; - contract: string; - name: string; - transaction: string; - result: { - r: string; - afterSeed: string; - s: string; - index: string; - previousSeed: string; - updater: string; - timestamp: string; - }; - resourceNode: string; - } - - export interface EventResult { - block: number; - timestamp: number; - contract: string; - name: string; - transaction: string; - result: { - index: string; - rng: string; - timestamp: string; - }; - resourceNode: string; - } - - export interface TrxAccount { - address: string; - balance: number; - frozen: { frozen_balance: number; expire_time: number }[]; - create_time: number; - latest_opration_time: number; - latest_consume_free_time: number; - account_resource: { - frozen_balance_for_energy: { - frozen_balance: number; - expire_time: number; - }; - latest_consume_time_for_energy: number; - }; - owner_permission: { - permission_name: string; - threshold: number; - keys: [[Record] | Record]; - }; - active_permission: { - type: string; - id: number; - permission_name: string; - threshold: number; - operations: string; - keys: [Array]; - }[]; - assetV2: { key: string; value: number }[]; - free_asset_net_usageV2: { key: string; value: number }[]; - } - - export interface ParameterValueOnTriggerSC { - data: string; - token_id: number; - owner_address: string; - call_token_value: number; - contract_address: string; - } - - export interface RawDataContract { - parameter: { - value: - | { - amount: number; - owner_address: string; - to_address: string; - } - | ParameterValueOnTriggerSC - | Record; - type_url: string; - }; - type: string; - } - - export interface Transaction { - visible: boolean; - signature?: string[]; - txID: string; - raw_data: { - contract: RawDataContract[] | Record[]; - ref_block_bytes: string; - ref_block_hash: string; - expiration: number; - timestamp: number; - fee_limit?: number; - }; - raw_data_hex: string; - } - - export interface TransactionResult { - result: { [key: string]: any } | boolean; - approved_list?: string[]; - transaction: - | { - result: { result: boolean }; - txid: string; - transaction: { - signature: any[]; - txID: string; - raw_data: Record[]; - raw_data_hex: string; - }; - } - | Transaction; - } - - export interface RawTransactionResult { - result: { [key: string]: any } | boolean; - txid: string; - approved_list?: string[]; - transaction: { - result: { result: boolean }; - contract_address: string; - visible: boolean; - signature: string[]; - txID: string; - raw_data: Record; - raw_data_hex: string; - }; - } - - export interface TronAccountResource { - freeNetLimit: number; - netLimit: number; - assetNetUsed: { key: string; value: number }[]; - assetNetLimit: { key: string; value: number }[]; - totalNetLimit: number; - totalNetWeight: number; - energyLimit: number; - totalEnergyLimit: number; - totalEnergyWeight: number; - } - - export interface BlockTransaction { - ret: Array<{ contractRet: string }>; - signature: string[]; - txID: string; - contract_address: string; - raw_data: { - contract: Array<{ - parameter: { - value: { - owner_address: string; - new_contract: { - bytecode: string; - consume_user_resource_percent: number; - name: string; - origin_address: string; - abi: Record; - origin_energy_limit: number; - }; - }; - type_url: string; - }; - type: string; - }>; - ref_block_bytes: string; - ref_block_hash: string; - expiration: number; - fee_limit: number; - timestamp: number; - }; - raw_data_hex: string; - } - - export interface BlockInfo { - blockID: string; - block_header: { - raw_data: { - number?: number; - txTrieRoot: string; - witness_address: string; - parentHash: string; - timestamp?: number; - version?: number; - }; - witness_signature: string; - }; - transactions?: BlockTransaction[]; - } - - export interface KeyValue { - key: string; - value?: number; - } - - export type ChainParameter = KeyValue; - - export interface DelegatedResource { - from: string; - to: string; - frozen_balance_for_bandwidth: number; - } - - export interface DelegatedResourceList { - delegatedResource: DelegatedResource[]; - } - - export interface DelegatedResourceAccount { - account: string | HexString; - toAccounts: string[] | HexString[]; - } - - export interface Exchange { - exchange_id: number; - creator_address: string | HexString; - create_time: number; - first_token_id: string; - first_token_balance: number; - second_token_id: string; - second_token_balance: number; - } - - export interface ConfigNodeInfo { - activeNodeSize: number; - allowAdaptiveEnergy: number; - allowCreationOfContracts: number; - backupListenPort: number; - backupMemberSize: number; - backupPriority: number; - codeVersion: string; - dbVersion: number; - discoverEnable: boolean; - listenPort: number; - maxConnectCount: number; - maxTimeRatio: number; - minParticipationRate: number; - minTimeRatio: number; - p2pVersion: string; - passiveNodeSize: number; - sameIpMaxConnectCount: number; - sendNodeSize: number; - supportConstant: boolean; - versionName: string; - versionNum: string; - } - - export interface MachineInfo { - cpuCount: number; - cpuRate: number; - deadLockThreadCount: number; - deadLockThreadInfoList: any[]; // this can be improved by defining a specific type - freeMemory: number; - javaVersion: string; - jvmFreeMemory: number; - jvmTotalMemoery: number; - memoryDescInfoList: any[]; // this can be improved by defining a specific type - osName: string; - processCpuRate: number; - threadCount: number; - totalMemory: number; - } - - export interface PeerInfo { - active: boolean; - avgLatency: number; - blockInPorcSize: number; - connectTime: number; - disconnectTimes: number; - headBlockTimeWeBothHave: number; - headBlockWeBothHave: string; - host: string; - inFlow: number; - lastBlockUpdateTime: number; - lastSyncBlock: string; - localDisconnectReason: string; - needSyncFromPeer: boolean; - needSyncFromUs: boolean; - nodeCount: number; - nodeId: string; - port: number; - remainNum: number; - remoteDisconnectReason: string; - score: number; - syncBlockRequestedSize: number; - syncFlag: boolean; - syncToFetchSize: number; - syncToFetchSizePeekNum: number; - unFetchSynNum: number; - } - - export interface NodeInfo { - activeConnectCount: number; - beginSyncNum: number; - block: string; - cheatWitnessInfoMap: any; // this can be improved by defining a specific type - configNodeInfo: ConfigNodeInfo; - currentConnectCount: number; - machineInfo: MachineInfo; - passiveConnectCount: number; - peerList: PeerInfo[]; - solidityBlock: string; - totalFlow: number; - } - - export interface TokenInfo { - owner_address: string; - name: string; - abbr: string; - total_supply: number; - trx_num: number; - precision: number; - num: number; - start_time: number; - end_time: number; - description: string; - url: string; - id: string; - } - - export interface Transaction { - id: string; - fee: number; - blockNumber: number; - blockTimeStamp: number; - contractResult: string[]; - contract_address: string; - receipt: { - origin_energy_usage: number; - energy_usage_total: number; - net_fee: number; - result: string; - }; - log: { - address: string; - topics: string[]; - data: string; - }[]; - internal_transactions?: { - hash: string; - caller_address: string; - transferTo_address: string; - callValueInfo: string[]; - note: string; - }[]; - } - - export interface Proposal { - proposal_id: number; - proposer_address: string; - parameters: { [key: string]: any }[]; // Assuming the parameters can be of any type - expiration_time: number; - create_time: number; - approvals: string[]; - state: 'APPROVED' | 'DISAPPROVED' | 'IN_VOTING'; - } - - export interface Miner { - address: string; - voteCount: number; - url: string; - totalProduced: number; - totalMissed: number; - latestBlockNum: number; - latestSlotNum: number; - isJobs: boolean; - } - - export interface AssetTRC10 { - name: string; - abbreviation: string; - description: string; - url: string; - totalSupply: number; - trxRatio: number; - tokenRatio: number; - saleStart: number; - saleEnd: number; - freeBandwidth: number; - freeBandwidthLimit: number; - frozenAmount: number; - frozenDuration: number; - precision: number; - permission_id?: number; - } - - export interface ContractExecutionParams { - feeLimit?: number; - callValue?: number; - tokenId?: string; - tokenValue?: number; - userFeePercentage?: number; - originEnergyLimit?: number; - // contrary to Tron docs abi doesn't just accept strings - abi: string | JsonFragment[] | Record[]; - bytecode: string; - parameters?: string[]; - rawParameter?: string; - name: string; - permissionId?: number; - } - - export interface EnergyEstimate { - result: Record; - energy_required: number; - } - - export interface TriggerConstantContractResult { - result: { - result: boolean; - }; - energy_used: number; - constant_result: string[]; - logs: { - address: string; - data: string; - topics: string[]; - }[]; - transaction: { - ret: Record[]; - visible: boolean; - txID: string; - raw_data: { - contract: { - parameter: { - value: { - data: string; - owner_address: string; - contract_address: string; - }; - type_url: string; - }; - type: string; - }[]; - ref_block_bytes: string; - ref_block_hash: string; - expiration: number; - timestamp: number; - }; - raw_data_hex: string; - }; - } - - export interface Header { - [key: string]: string; - } - - export interface TronWebConstructor { - fullHost: string; - headers?: Header; - privateKey?: string; - } - - export interface SideOptions { - fullNode: string; - solidityNode: string; - eventServer: string; - mainGatewayAddress: string; - sideGatewayAddress: string; - sideChainId: string; - } - - export interface AssetUpdate { - description?: string; - url?: string; - freeBandwidth: number; - freeBandwidthLimit: number; - permissionId?: number; - } - - export interface TronContract { - tronWeb: Record; - injectPromise: (...args: any[]) => any; - address: string; - abi: JsonFragment[] | []; - eventListener: boolean; - bytecode: boolean | string; - deployed: boolean | string; - lastBlock: boolean | string | number; - methods: Record; - methodInstances: Record; - props: []; - } - - export interface TronContractResult { - contract_address: string; - origin_address: string; - abi: JsonFragment[] | [] | Record; - bytecode: boolean | string; - name: string; - } - - export interface TronWebError1 { - code: string; - message: string; - txid: string; - } - - export interface TronWebError2 { - Error: string; - } - export type TronWebErrorResponse = TronWebError1 | TronWebError2; -} diff --git a/src/tron/types.ts b/src/tron/types.ts deleted file mode 100644 index 5376c78..0000000 --- a/src/tron/types.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ContractExecutionParams } from 'tronweb/interfaces'; - -export const MethodSymbol = Symbol('method'); - -export interface CreateSmartContract extends ContractExecutionParams { - data: string; - [MethodSymbol]: TronTxMethods.CREATE; -} - -export enum TronTxMethods { - CREATE = 'create', -} diff --git a/src/tron/utils.ts b/src/tron/utils.ts deleted file mode 100644 index 9387936..0000000 --- a/src/tron/utils.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { TronWebError1, TronWebError2 } from 'tronweb/interfaces'; - -export const isArrayofBytes = (data: any): boolean => { - return ( - Buffer.isBuffer(data) || - (Array.isArray(data) && - data.every((num) => typeof num === 'number' && num >= 0 && num <= 255)) - ); -}; - -export class TronWebError extends Error { - readonly code: string; - readonly hash: string; - constructor({ code, message, txid }: TronWebError1) { - // need to convert the message to utf-8 - message = Buffer.from(message, 'hex').toString(); - super(message); - this.code = code; - this.name = this.constructor.name; - this.hash = txid; - } -} - -export class TronWebGetTransactionError extends Error { - constructor({ Error }: TronWebError2) { - super(Error); - this.name = this.constructor.name; - } -} - -export class TronTransactionFailedError extends Error { - constructor(readonly receipt: Record) { - super(`failed execution\n${JSON.stringify(receipt, null, 2)}`); - this.name = this.constructor.name; - } -} - -// Base unit in milliseconds -const MILLISECOND = 1; -const SECOND = 1000 * MILLISECOND; -const MINUTE = 60 * SECOND; -const HOUR = 60 * MINUTE; -const DAY = 24 * HOUR; - -export const Time = { - MILLISECOND, - SECOND, - MINUTE, - HOUR, - DAY, - get NOW() { - return Date.now(); - }, - sleep(ms: number): Promise { - return new Promise((res) => setTimeout(res, ms)); - }, -} as const; - -export const ensure0x = (str: string): string => { - if (str.startsWith('0x')) return str; - return '0x' + str; -}; - -export const strip0x = (str: string): string => { - if (str.startsWith('0x')) return str.slice(2); - return str; -}; diff --git a/src/type-extensions.ts b/src/type-extensions.ts deleted file mode 100644 index 8771f49..0000000 --- a/src/type-extensions.ts +++ /dev/null @@ -1,156 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import 'hardhat/types/runtime'; -import 'hardhat/types/config'; -import { - Address, - DeploymentsExtension, - DeterministicDeploymentInfo, -} from '../types'; -import { LlmConfig } from './llm'; -import { EthereumProvider } from 'hardhat/types'; - -declare module 'hardhat/types/config' { - interface HardhatUserConfig { - namedAccounts?: { - [name: string]: - | string - | number - | { [network: string]: null | number | string }; - }; - deterministicDeployment?: - | { - [network: string]: DeterministicDeploymentInfo; - } - | ((network: string) => DeterministicDeploymentInfo | undefined); - external?: { - deployments?: { - [networkName: string]: string[]; - }; - contracts?: { - artifacts: string | string[]; - deploy?: string; - }[]; - }; - verify?: { etherscan?: { apiKey?: string } }; - llm?: LlmConfig; - } - - interface HardhatConfig { - namedAccounts: { - [name: string]: - | string - | number - | { [network: string]: null | number | string }; - }; - deterministicDeployment?: - | { - [network: string]: DeterministicDeploymentInfo; - } - | ((network: string) => DeterministicDeploymentInfo | undefined); - external?: { - deployments?: { - [networkName: string]: string[]; - }; - contracts?: { - artifacts: string[]; - deploy?: string; - }[]; - }; - verify: { etherscan?: { apiKey?: string } }; - llm: LlmConfig; - } - - interface HardhatNetworkUserConfig { - live?: boolean; - saveDeployments?: boolean; - tags?: string[]; - deploy?: string | string[]; - companionNetworks?: { [name: string]: string }; - verify?: { etherscan?: { apiKey?: string; apiUrl?: string } }; - zksync?: boolean; - tron?: boolean; - autoImpersonate?: boolean; - } - - interface HttpNetworkUserConfig { - live?: boolean; - saveDeployments?: boolean; - tags?: string[]; - deploy?: string | string[]; - companionNetworks?: { [name: string]: string }; - verify?: { etherscan?: { apiKey?: string; apiUrl?: string } }; - zksync?: boolean; - tron?: boolean; - autoImpersonate?: boolean; - } - - interface ProjectPathsUserConfig { - deploy?: string | string[]; - deployments?: string; - imports?: string; - } - - interface HardhatNetworkConfig { - live: boolean; - saveDeployments: boolean; - tags: string[]; - deploy?: string[]; - companionNetworks: { [name: string]: string }; - verify?: { etherscan?: { apiKey?: string; apiUrl?: string } }; - zksync?: boolean; - tron?: boolean; - autoImpersonate?: boolean; - } - - interface HttpNetworkConfig { - live: boolean; - saveDeployments: boolean; - tags: string[]; - deploy?: string[]; - companionNetworks: { [name: string]: string }; - verify?: { etherscan?: { apiKey?: string; apiUrl?: string } }; - zksync?: boolean; - tron?: boolean; - autoImpersonate?: boolean; - } - - interface ProjectPathsConfig { - deploy: string[]; - deployments: string; - imports: string; - } -} - -declare module 'hardhat/types/runtime' { - interface HardhatRuntimeEnvironment { - deployments: DeploymentsExtension; - getNamedAccounts: () => Promise<{ - [name: string]: Address; - }>; - getUnnamedAccounts: () => Promise; - getChainId(): Promise; - companionNetworks: { - [name: string]: { - deployments: DeploymentsExtension; - getNamedAccounts: () => Promise<{ - [name: string]: Address; - }>; - getUnnamedAccounts: () => Promise; - getChainId(): Promise; - provider: EthereumProvider; - }; - }; - } - - interface Network { - live: boolean; - saveDeployments: boolean; - tags: Record; - deploy: string[]; - companionNetworks: { [name: string]: string }; - verify?: { etherscan?: { apiKey?: string; apiUrl?: string } }; - zksync?: boolean; - tron?: boolean; - autoImpersonate?: boolean; - } -} diff --git a/src/utils.ts b/src/utils.ts deleted file mode 100644 index cbdc04c..0000000 --- a/src/utils.ts +++ /dev/null @@ -1,674 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import * as fs from 'fs-extra'; -import * as path from 'path'; -import { Wallet } from '@ethersproject/wallet'; -import { getAddress, isAddress } from '@ethersproject/address'; -import { Interface, FunctionFragment, Fragment } from '@ethersproject/abi'; -import { Artifact, HardhatRuntimeEnvironment, Network } from 'hardhat/types'; -import { BigNumber } from '@ethersproject/bignumber'; -import { ABI, Export, ExtendedArtifact, MultiExport } from '../types'; -import { Artifacts } from 'hardhat/internal/artifacts'; -import murmur128 from 'murmur-128'; -import { Transaction } from '@ethersproject/transactions'; -import { store } from './globalStore'; -import { ERRORS } from 'hardhat/internal/core/errors-list'; -import { HardhatError } from 'hardhat/internal/core/errors'; - -function getOldArtifactSync( - name: string, - folderPath: string -): ExtendedArtifact | undefined { - const oldArtifactPath = path.join(folderPath, name + '.json'); - let artifact; - if (fs.existsSync(oldArtifactPath)) { - try { - artifact = JSON.parse(fs.readFileSync(oldArtifactPath).toString()); - } catch (e) { - console.error(e); - } - } - return artifact; -} - -export async function getArtifactFromFolders( - name: string, - folderPaths: string[] -): Promise { - for (const onepath of folderPaths) { - const artifacts = new Artifacts(onepath); - let artifact = getOldArtifactSync(name, onepath); - if (!artifact) { - try { - artifact = artifacts.readArtifactSync(name); - } catch (e) { - const hardhatError = e as HardhatError; - if ( - hardhatError.number && - hardhatError.number == ERRORS.ARTIFACTS.MULTIPLE_FOUND.number - ) { - throw e; - } - } - } - if (artifact) { - return artifact; - } - } -} - -// TODO -// const solcInputMetadataCache: Record = {}; - -export async function getExtendedArtifactFromFolders( - name: string, - folderPaths: string[] -): Promise { - for (const folderPath of folderPaths) { - const artifacts = new Artifacts(folderPath); - let artifact = getOldArtifactSync(name, folderPath); - if ( - !artifact && - (await artifacts.artifactExists(name).catch(() => false)) - ) { - const hardhatArtifact: Artifact = await artifacts.readArtifact(name); - // check if name is already a fullyQualifiedName - let fullyQualifiedName = name; - let contractName = name; - if (!fullyQualifiedName.includes(':')) { - fullyQualifiedName = `${hardhatArtifact.sourceName}:${name}`; - } else { - contractName = fullyQualifiedName.split(':')[1]; - } - // TODO try catch ? in case debug file is missing - const buildInfo = await artifacts.getBuildInfo(fullyQualifiedName); - if (buildInfo) { - const solcInput = JSON.stringify(buildInfo.input, null, ' '); - const solcInputHash = Buffer.from(murmur128(solcInput)).toString('hex'); - artifact = { - ...hardhatArtifact, - ...buildInfo.output.contracts[hardhatArtifact.sourceName][ - contractName - ], - solcInput, - solcInputHash, - }; - } else { - artifact = { - ...hardhatArtifact, - }; - } - } - if (artifact) { - return artifact; - } - } -} - -export function loadAllDeployments( - hre: HardhatRuntimeEnvironment, - deploymentsPath: string, - onlyABIAndAddress?: boolean, - externalDeployments?: { [networkName: string]: string[] } -): MultiExport { - const networksFound: { [networkName: string]: Export } = {}; - const all: MultiExport = {}; // TODO any is chainConfig - fs.readdirSync(deploymentsPath).forEach((fileName) => { - const fPath = path.resolve(deploymentsPath, fileName); - const stats = fs.statSync(fPath); - if (stats.isDirectory()) { - let chainIdFound: string; - const chainIdFilepath = path.join(fPath, '.chainId'); - if (fs.existsSync(chainIdFilepath)) { - chainIdFound = fs.readFileSync(chainIdFilepath).toString().trim(); - } else { - throw new Error( - `with hardhat-deploy >= 0.6 you need to rename network folder without appended chainId - You also need to create a '.chainId' file in the folder with the chainId` - ); - } - - if (!all[chainIdFound]) { - all[chainIdFound] = []; - } - const contracts = loadDeployments( - deploymentsPath, - fileName, - onlyABIAndAddress - ); - const network = { - name: fileName, - chainId: chainIdFound, - contracts, - }; - networksFound[fileName] = network; - all[chainIdFound].push(network); - } - }); - - if (externalDeployments) { - for (const networkName of Object.keys(externalDeployments)) { - for (const folderPath of externalDeployments[networkName]) { - const networkConfig = hre.config.networks[networkName]; - if (networkConfig && networkConfig.chainId) { - const networkChainId = networkConfig.chainId.toString(); - const contracts = loadDeployments( - folderPath, - '', - onlyABIAndAddress, - undefined, - networkChainId - ); - const networkExist = networksFound[networkName]; - if (networkExist) { - if (networkChainId !== networkExist.chainId) { - throw new Error( - `mismatch between external deployment network ${networkName} chainId: ${networkChainId} vs existing chainId: ${networkExist.chainId}` - ); - } - networkExist.contracts = { - ...contracts, - ...networkExist.contracts, - }; - } else { - const network = { - name: networkName, - chainId: networkChainId, - contracts, - }; - networksFound[networkName] = network; - all[networkChainId].push(network); - } - } else { - console.warn( - `export-all limitation: attempting to load external deployments from ${folderPath} without chainId info. Please set the chainId in the network config for ${networkName}` - ); - } - } - } - } - return all; -} - -export function deleteDeployments( - deploymentsPath: string, - subPath: string -): void { - const deployPath = path.join(deploymentsPath, subPath); - fs.removeSync(deployPath); -} - -function loadDeployments( - deploymentsPath: string, - subPath: string, - onlyABIAndAddress?: boolean, - expectedChainId?: string, - truffleChainId?: string -) { - const deploymentsFound: { [name: string]: any } = {}; - const deployPath = path.join(deploymentsPath, subPath); - - let filesStats; - try { - filesStats = traverse( - deployPath, - undefined, - undefined, - (name) => !name.startsWith('.') && name !== 'solcInputs' - ); - } catch (e) { - // console.log('no folder at ' + deployPath); - return {}; - } - if (filesStats.length > 0) { - if (expectedChainId) { - const chainIdFilepath = path.join(deployPath, '.chainId'); - if (fs.existsSync(chainIdFilepath)) { - const chainIdFound = fs.readFileSync(chainIdFilepath).toString().trim(); - if (expectedChainId !== chainIdFound) { - throw new Error( - `Loading deployment in folder '${deployPath}' (with chainId: ${chainIdFound}) for a different chainId (${expectedChainId})` - ); - } - } else { - throw new Error( - `with hardhat-deploy >= 0.6 you are expected to create a '.chainId' file in the deployment folder` - ); - } - } - } - let fileNames = filesStats.map((a) => a.relativePath); - fileNames = fileNames.sort((a, b) => { - if (a < b) { - return -1; - } - if (a > b) { - return 1; - } - return 0; - }); - - for (const fileName of fileNames) { - if (fileName.substr(fileName.length - 5) === '.json') { - const deploymentFileName = path.join(deployPath, fileName); - let deployment = JSON.parse( - fs.readFileSync(deploymentFileName).toString() - ); - if (!deployment.address && deployment.networks) { - if (truffleChainId && deployment.networks[truffleChainId]) { - // TRUFFLE support - const truffleDeployment = deployment as any; // TruffleDeployment; - deployment.address = - truffleDeployment.networks[truffleChainId].address; - deployment.transactionHash = - truffleDeployment.networks[truffleChainId].transactionHash; - } - } - if (onlyABIAndAddress) { - deployment = { - address: deployment.address, - abi: deployment.abi, - linkedData: deployment.linkedData, - }; - } - const name = fileName.slice(0, fileName.length - 5); - // console.log('fetching ' + deploymentFileName + ' for ' + name); - - deploymentsFound[name] = deployment; - } - } - return deploymentsFound; -} - -export function addDeployments( - // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - db: any, - deploymentsPath: string, - subPath: string, - expectedChainId?: string, - truffleChainId?: string -): void { - const contracts = loadDeployments( - deploymentsPath, - subPath, - false, - expectedChainId, - truffleChainId - ); - for (const key of Object.keys(contracts)) { - db.deployments[key] = contracts[key]; - // TODO ABIS - // db.abis[contracts[key].address] = mergeABI( - // db.abis[contracts[key].address], - // contracts[key].abi - // ); - } -} - -function transformNamedAccounts( - configNamedAccounts: { [name: string]: any }, - chainIdGiven: string | number, - accounts: string[], - networkConfigName: string -): { - namedAccounts: { [name: string]: string }; - unnamedAccounts: string[]; - unknownAccounts: string[]; - addressesToProtocol: { [address: string]: string }; -} { - const addressesToProtocol: { [address: string]: string } = {}; - const unknownAccountsDict: { [address: string]: boolean } = {}; - const knownAccountsDict: { [address: string]: boolean } = {}; - for (const account of accounts) { - knownAccountsDict[account.toLowerCase()] = true; - } - const namedAccounts: { [name: string]: string } = {}; - const usedAccounts: { [address: string]: boolean } = {}; - // TODO transform into checksum address - if (configNamedAccounts) { - const accountNames = Object.keys(configNamedAccounts); - // eslint-disable-next-line no-inner-declarations - function parseSpec(spec: any): string | undefined { - let address: string | undefined; - switch (typeof spec) { - case 'string': - // eslint-disable-next-line no-case-declarations - const protocolSplit = spec.split('://'); - if (protocolSplit.length > 1) { - if (protocolSplit[0].toLowerCase() === 'external') { - address = protocolSplit[1]; - addressesToProtocol[address.toLowerCase()] = - protocolSplit[0].toLowerCase(); - // knownAccountsDict[address.toLowerCase()] = true; // TODO ? this would prevent auto impersonation in fork/test - } else if (protocolSplit[0].toLowerCase() === 'trezor') { - address = protocolSplit[1]; - addressesToProtocol[address.toLowerCase()] = - protocolSplit[0].toLowerCase(); - } else if (protocolSplit[0].toLowerCase() === 'ledger') { - const addressSplit = protocolSplit[1].split(':'); - if (addressSplit.length > 1) { - address = addressSplit[1]; - addressesToProtocol[ - address.toLowerCase() - ] = `ledger://${addressSplit[0]}`; - } else { - address = protocolSplit[1]; - addressesToProtocol[address.toLowerCase()] = - "ledger://m/44'/60'/0'/0/0"; - } - // knownAccountsDict[address.toLowerCase()] = true; // TODO ? this would prevent auto impersonation in fork/test - } else if (protocolSplit[0].toLowerCase() === 'privatekey') { - address = new Wallet(protocolSplit[1]).address; - addressesToProtocol[address.toLowerCase()] = - 'privatekey://' + protocolSplit[1]; - } else { - throw new Error( - `unsupported protocol ${protocolSplit[0]}:// for named accounts` - ); - } - } else { - if (spec.slice(0, 2).toLowerCase() === '0x') { - if (!isAddress(spec)) { - throw new Error( - `"${spec}" is not a valid address, if you used to put privateKey there, use the "privatekey://" prefix instead` - ); - } - address = spec; - } else { - address = parseSpec(configNamedAccounts[spec]); - } - } - break; - case 'number': - if (accounts) { - address = accounts[spec]; - } - break; - case 'undefined': - break; - case 'object': - if (spec) { - if (spec.type === 'object') { - address = spec; - } else { - const newSpec = chainConfig( - spec, - chainIdGiven, - networkConfigName - ); - if (typeof newSpec !== 'undefined') { - address = parseSpec(newSpec); - } - } - } - break; - } - if (address) { - if (typeof address === 'string') { - address = getAddress(address); - } - } - return address; - } - - for (const accountName of accountNames) { - const spec = configNamedAccounts[accountName]; - const address = parseSpec(spec); - if (address) { - namedAccounts[accountName] = address; - usedAccounts[address.toLowerCase()] = true; - if (!knownAccountsDict[address.toLowerCase()]) { - unknownAccountsDict[address.toLowerCase()] = true; - } - } - } - } - const unnamedAccounts = []; - for (const address of accounts) { - if (!usedAccounts[address.toLowerCase()]) { - unnamedAccounts.push(getAddress(address)); - } - } - return { - namedAccounts, - unnamedAccounts, - unknownAccounts: Object.keys(unknownAccountsDict).map(getAddress), - addressesToProtocol, - }; -} - -function chainConfig( - object: any, - chainIdGiven: string | number, - networkConfigName: string -) { - // TODO utility function: - let chainIdDecimal; - if (typeof chainIdGiven === 'number') { - chainIdDecimal = '' + chainIdGiven; - } else { - if (chainIdGiven.startsWith('0x')) { - chainIdDecimal = '' + parseInt(chainIdGiven.slice(2), 16); - } else { - chainIdDecimal = chainIdGiven; - } - } - if (typeof object[networkConfigName] !== 'undefined') { - return object[networkConfigName]; - } else if (typeof object[chainIdGiven] !== 'undefined') { - return object[chainIdGiven]; - } else if (typeof object[chainIdDecimal] !== 'undefined') { - return object[chainIdDecimal]; - } else { - return object.default; - } -} - -export function processNamedAccounts( - network: Network, - namedAccounts: { - [name: string]: - | string - | number - | { [network: string]: null | number | string }; - }, - accounts: string[], - chainIdGiven: string -): { - namedAccounts: { [name: string]: string }; - unnamedAccounts: string[]; - unknownAccounts: string[]; - addressesToProtocol: { [address: string]: string }; -} { - if (namedAccounts) { - return transformNamedAccounts( - namedAccounts, - chainIdGiven, - accounts, - process.env.HARDHAT_DEPLOY_ACCOUNTS_NETWORK || getNetworkName(network) - ); - } else { - return { - namedAccounts: {}, - unnamedAccounts: accounts, - unknownAccounts: [], - addressesToProtocol: {}, - }; - } -} - -export function traverseMultipleDirectory(dirs: string[]): string[] { - const filepaths = []; - for (const dir of dirs) { - let filesStats = traverse(dir); - filesStats = filesStats.filter((v) => !v.directory); - for (const filestat of filesStats) { - filepaths.push(path.join(dir, filestat.relativePath)); - } - } - return filepaths; -} - -export const traverse = function ( - dir: string, - result: any[] = [], - topDir?: string, - filter?: (name: string, stats: any) => boolean // TODO any is Stats -): Array<{ - name: string; - path: string; - relativePath: string; - mtimeMs: number; - directory: boolean; -}> { - fs.readdirSync(dir).forEach((name) => { - const fPath = path.resolve(dir, name); - const stats = fs.statSync(fPath); - if ((!filter && !name.startsWith('.')) || (filter && filter(name, stats))) { - const fileStats = { - name, - path: fPath, - relativePath: path.relative(topDir || dir, fPath), - mtimeMs: stats.mtimeMs, - directory: stats.isDirectory(), - }; - if (fileStats.directory) { - result.push(fileStats); - return traverse(fPath, result, topDir || dir, filter); - } - result.push(fileStats); - } - }); - return result; -}; - -export function getNetworkName(network: Network): string { - if (process.env['HARDHAT_DEPLOY_FORK']) { - return process.env['HARDHAT_DEPLOY_FORK']; - } - if ('forking' in network.config && (network.config.forking as any)?.network) { - return (network.config.forking as any)?.network; - } - return network.name; -} - -export function getDeployPaths(network: Network): string[] { - const networkName = getNetworkName(network); - if (networkName === network.name) { - return network.deploy || store.networks[networkName]?.deploy; // fallback to global store - } else { - return store.networks[networkName]?.deploy; // skip network.deploy - } -} - -export function filterABI(abi: ABI, excludeSighashes: Set): any[] { - return abi.filter( - (fragment) => - fragment.type !== 'function' || - !excludeSighashes.has( - Interface.getSighash(Fragment.from(fragment) as FunctionFragment) - ) - ); -} - -export function mergeABIs( - abis: any[][], - options: { check: boolean; skipSupportsInterface: boolean } -): any[] { - if (abis.length === 0) { - return []; - } - const result: any[] = JSON.parse(JSON.stringify(abis[0])); - - for (let i = 1; i < abis.length; i++) { - const abi = abis[i]; - for (const fragment of abi) { - const newEthersFragment = Fragment.from(fragment); - // TODO constructor special handling ? - const foundSameSig = result.find((v) => { - const existingEthersFragment = Fragment.from(v); - if (v.type !== fragment.type) { - return false; - } - if (!existingEthersFragment) { - return v.name === fragment.name; // TODO fallback and receive hanlding - } - - if ( - existingEthersFragment.type === 'constructor' || - newEthersFragment.type === 'constructor' - ) { - return existingEthersFragment.name === newEthersFragment.name; - } - - if (newEthersFragment.type === 'function') { - return ( - Interface.getSighash(existingEthersFragment as FunctionFragment) === - Interface.getSighash(newEthersFragment as FunctionFragment) - ); - } else if (newEthersFragment.type === 'event') { - return existingEthersFragment.format() === newEthersFragment.format(); - } else { - return v.name === fragment.name; // TODO fallback and receive hanlding - } - }); - if (foundSameSig) { - if ( - options.check && - !( - options.skipSupportsInterface && - fragment.name === 'supportsInterface' - ) - ) { - if (fragment.type === 'function') { - throw new Error( - `function "${fragment.name}" will shadow "${foundSameSig.name}". Please update code to avoid conflict.` - ); - } - } - } else { - result.push(fragment); - } - } - } - - return result; -} - -// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types -export function recode(decoded: any): Transaction { - return { - from: decoded.from, - gasPrice: decoded.gasPrice ? BigNumber.from(decoded.gasPrice) : undefined, - maxFeePerGas: decoded.maxFeePerGas - ? BigNumber.from(decoded.maxFeePerGas) - : undefined, - maxPriorityFeePerGas: decoded.maxPriorityFeePerGas - ? BigNumber.from(decoded.maxPriorityFeePerGas) - : undefined, - gasLimit: BigNumber.from(decoded.gasLimit), - to: decoded.to, - value: BigNumber.from(decoded.value), - nonce: decoded.nonce, - data: decoded.data, - r: decoded.r, - s: decoded.s, - v: decoded.v, - // creates: tx.creates, // TODO test - chainId: decoded.chainId, - }; -} - -export function countElements(arr: any) { - let count = 0; - - for (const item of arr) { - if (Array.isArray(item)) { - count += countElements(item); - } else { - count += 1; - } - } - return count; -} diff --git a/templates/foundry/README.evm.md b/templates/foundry/README.evm.md new file mode 100644 index 0000000..8bec7c2 --- /dev/null +++ b/templates/foundry/README.evm.md @@ -0,0 +1,52 @@ +# Foundry EVM Project with Sunhat + +This project uses Sunhat to select and run a project-local Foundry toolchain for an EVM target. The framework and target are fixed in `sunhat.toml`. + +## Global command prerequisites + +The `sunhat ...` examples use the `sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: + +```bash +npm install --global sunhat@2.0.0 +sunhat --version +``` + +Run project commands from this directory or a subdirectory. Install the project-pinned Foundry toolchain with `sunhat toolchain install` before building, testing, or using Cast, Anvil, or Chisel. Global Sunhat still uses the binaries in this project's `.sunhat/` directory. + +The quick start also installs `sunhat@2.0.0` as an exact local development dependency. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. + +## Quick start + +```bash +npm install --save-dev --save-exact sunhat@2.0.0 +sunhat toolchain install +sunhat toolchain check +npm run build +npm test +``` + +The install command replaces the scaffold's `file:` Sunhat reference with the npm version and installs the project's other declared dependencies. + +`toolchain install` downloads the Foundry release pinned by Sunhat and stores it under `.sunhat/toolchains/`. Subsequent commands verify the executable digest before running it. + +## Commands + +| Command | Purpose | +| --- | --- | +| `npm run build` | Compile contracts with `sunhat build`. | +| `npm test` | Run the Foundry test suite with `sunhat test`. | +| `sunhat build --sizes` | Compile contracts and report contract sizes. | +| `sunhat test -vvv` | Run tests with verbose traces. | +| `sunhat test --match-contract CounterTest` | Run one test contract. | +| `sunhat snapshot` | Record gas snapshots. | +| `sunhat coverage` | Generate a coverage report. | +| `sunhat script ` | Run a Foundry script. | +| `sunhat create ` | Deploy a contract with Forge. | +| `sunhat cast ` | Run a Cast command through the selected toolchain. | +| `sunhat anvil` | Start the project-pinned Anvil node. | +| `sunhat chisel` | Start the project-pinned Solidity REPL. | +| `sunhat toolchain install` | Download and verify the pinned project toolchain. | +| `sunhat toolchain info` | Print the pinned toolchain metadata. | +| `sunhat toolchain check` | Verify the installed binary digests. | + +Arguments after the Sunhat command are passed to Foundry unchanged. diff --git a/templates/foundry/README.tron.md b/templates/foundry/README.tron.md new file mode 100644 index 0000000..f77a201 --- /dev/null +++ b/templates/foundry/README.tron.md @@ -0,0 +1,64 @@ +# Foundry TRON Project with Sunhat + +This project uses Sunhat to select and run a project-local Foundry-TRON toolchain. The framework and TRON target are fixed in `sunhat.toml`. + +## Global command prerequisites + +The `sunhat ...` examples use the `sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: + +```bash +npm install --global sunhat@2.0.0 +sunhat --version +``` + +Run project commands from this directory or a subdirectory. Install the project-pinned Foundry-TRON toolchain with `sunhat toolchain install` before building, testing, or using Cast. Global Sunhat still uses the binaries in this project's `.sunhat/` directory. Anvil and Chisel are unavailable for TRON. + +The quick start also installs `sunhat@2.0.0` as an exact local development dependency. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. + +## Quick start + +```bash +npm install --save-dev --save-exact sunhat@2.0.0 +sunhat toolchain install +sunhat toolchain check +npm run build +npm test +``` + +The install command replaces the scaffold's `file:` Sunhat reference with the npm version and installs the project's other declared dependencies. + +`toolchain install` downloads the Foundry-TRON release pinned by Sunhat and stores it under `.sunhat/toolchains/`. Subsequent commands verify the executable digest before running it. + +## Commands + +| Command | Purpose | +| --- | --- | +| `npm run build` | Compile contracts with `sunhat build`. | +| `npm test` | Run tests on the TRON execution path with `sunhat test`. | +| `sunhat build --sizes` | Compile contracts and report contract sizes. | +| `sunhat test -vvv` | Run tests with verbose traces. | +| `sunhat test --match-contract CounterTest` | Run one test contract. | +| `sunhat test --gas-report` | Report energy and bandwidth usage. | +| `sunhat snapshot` | Record energy snapshots. | +| `sunhat coverage` | Generate a coverage report. | +| `sunhat script ` | Run a Foundry script. | +| `sunhat create ` | Deploy a contract through the TRON transaction path. | +| `sunhat cast ` | Run a Cast command through Foundry-TRON. | +| `sunhat toolchain install` | Download and verify the pinned project toolchain. | +| `sunhat toolchain info` | Print the pinned toolchain metadata. | +| `sunhat toolchain check` | Verify the installed binary digests. | + +Arguments after the Sunhat command are passed to Foundry-TRON unchanged. + +## Toolchain requirement + +`foundry.toml` contains `network = "tron"`. This setting requires the Foundry-TRON fork selected by Sunhat. + +Do not run a globally installed `forge` directly. Standard Foundry does not recognize the `tron` network and fails while parsing `foundry.toml`. Use these commands instead: + +```bash +sunhat build +sunhat test +``` + +TRON builds use the native `tron-solc` resolved by Foundry-TRON. `anvil` and `chisel` are unavailable for this target. diff --git a/templates/foundry/script/Counter.s.sol b/templates/foundry/script/Counter.s.sol new file mode 100644 index 0000000..eb527d9 --- /dev/null +++ b/templates/foundry/script/Counter.s.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Counter} from "../src/Counter.sol"; + +// forge-lint: disable-next-line(multi-contract-file) +interface IVm { + function startBroadcast() external; + function stopBroadcast() external; +} + +/// @title DeployCounter +/// @notice Deploys Counter using Foundry's broadcast cheatcodes without an external script library. +// forge-lint: disable-next-line(multi-contract-file) +contract DeployCounter { + IVm private constant VM = IVm(address(uint160(uint256(keccak256("hevm cheat code"))))); + + function run() external returns (Counter counter) { + VM.startBroadcast(); + counter = new Counter(); + VM.stopBroadcast(); + } +} diff --git a/templates/foundry/src/Counter.sol b/templates/foundry/src/Counter.sol new file mode 100644 index 0000000..f1bc306 --- /dev/null +++ b/templates/foundry/src/Counter.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +/// @title Counter +/// @notice Minimal state transition used to verify a Sunhat project setup. +contract Counter { + uint256 public number; + + event NumberChanged(uint256 indexed previousNumber, uint256 indexed newNumber); + + /// @notice Replaces the stored number. + /// @param newNumber New value to store. + function setNumber(uint256 newNumber) external { + uint256 previousNumber = number; + number = newNumber; + emit NumberChanged(previousNumber, newNumber); + } + + /// @notice Increments the stored number by one. + function increment() external { + uint256 previousNumber = number; + uint256 newNumber = previousNumber + 1; + number = newNumber; + emit NumberChanged(previousNumber, newNumber); + } +} diff --git a/templates/foundry/test/Counter.t.sol b/templates/foundry/test/Counter.t.sol new file mode 100644 index 0000000..d4952d9 --- /dev/null +++ b/templates/foundry/test/Counter.t.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Counter} from "../src/Counter.sol"; + +/// @title CounterTest +/// @notice Self-contained Foundry tests with no external Solidity library dependency. +contract CounterTest { + Counter internal counter; + + function setUp() public { + counter = new Counter(); + } + + function testIncrement() public { + counter.increment(); + assert(counter.number() == 1); + } + + function testFuzzSetNumber(uint256 value) public { + counter.setNumber(value); + assert(counter.number() == value); + } +} diff --git a/templates/hardhat/README.evm.md b/templates/hardhat/README.evm.md new file mode 100644 index 0000000..4c3e6c4 --- /dev/null +++ b/templates/hardhat/README.evm.md @@ -0,0 +1,41 @@ +# Hardhat EVM Project with Sunhat + +This project uses Sunhat to run the locally installed Hardhat 2 toolchain for an EVM target. The framework and target are fixed in `sunhat.toml`. + +## Global command prerequisites + +The `sunhat ...` examples use the `sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: + +```bash +npm install --global sunhat@2.0.0 +sunhat --version +``` + +Run project commands from this directory or a subdirectory after the dependency installation below. Global Sunhat uses the project's local Hardhat 2 dependency and configuration. + +The quick start also installs `sunhat@2.0.0` as an exact local development dependency. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. + +## Quick start + +```bash +npm install --save-dev --save-exact sunhat@2.0.0 +npm run build +npm test +``` + +The install command replaces the scaffold's `file:` Sunhat reference with the npm version and installs the project's other declared dependencies. + +## Commands + +| Command | Purpose | +| --- | --- | +| `npm run build` | Compile contracts with `sunhat compile`. | +| `npm test` | Run the Hardhat test suite with `sunhat test`. | +| `sunhat compile --force` | Recompile all contracts. | +| `sunhat test --grep Counter` | Run matching tests. | +| `sunhat node` | Start the configured local EVM network. | +| `sunhat run scripts/deploy.ts` | Run the deployment script. | +| `sunhat clean` | Remove generated Hardhat artifacts and cache files. | +| `sunhat ` | Run a task registered by a Hardhat plugin. | + +Arguments after the Sunhat command are passed to Hardhat unchanged. diff --git a/templates/hardhat/README.tron.md b/templates/hardhat/README.tron.md new file mode 100644 index 0000000..4df4923 --- /dev/null +++ b/templates/hardhat/README.tron.md @@ -0,0 +1,57 @@ +# Hardhat TRON Project with Sunhat + +This project uses Sunhat to run Hardhat 2 with the Hardhat-TRON plugin and a TRE development network. The framework and TRON target are fixed in `sunhat.toml`. + +## Global command prerequisites + +The `sunhat ...` examples use the `sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: + +```bash +npm install --global sunhat@2.0.0 +sunhat --version +``` + +Run project commands from this directory or a subdirectory after the dependency installation below. Global Sunhat uses the project's local Hardhat 2 and Hardhat-TRON dependencies and configuration. + +The quick start also installs `sunhat@2.0.0` as an exact local development dependency. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. + +Docker must be installed and running. The generated configuration starts `tronbox/tre:dev` automatically when required. + +## Quick start + +```bash +npm install --save-dev --save-exact sunhat@2.0.0 +npm run build +npm test +``` + +The install command replaces the scaffold's `file:` Sunhat reference with the npm version and installs the project's other declared dependencies. + +The generated configuration selects the `tre` network and compiles contracts with `tron-solc`. + +## Commands + +| Command | Purpose | +| --- | --- | +| `npm run build` | Compile TRON contracts with `sunhat compile`. | +| `npm test` | Run the test suite against TRE with `sunhat test`. | +| `sunhat compile --force` | Recompile all contracts with `tron-solc`. | +| `sunhat test --grep Counter` | Run matching tests against TRE. | +| `sunhat node` | Run the configured Hardhat task. | +| `sunhat run scripts/deploy.ts` | Run the deployment script on the configured network. | +| `sunhat clean` | Remove generated Hardhat artifacts and cache files. | +| `sunhat ` | Run a task registered by a Hardhat plugin. | + +Arguments after the Sunhat command are passed to Hardhat unchanged. + +## External TRE instance + +Set both variables to use an existing TRE instance instead of the generated local defaults: + +```bash +export TRE_URL="http://127.0.0.1:9090/jsonrpc" +export TRE_PRIVATE_KEY="" +sunhat test +``` + +Never use the generated TRE development key on a public network. diff --git a/templates/hardhat/contracts/Counter.sol b/templates/hardhat/contracts/Counter.sol new file mode 100644 index 0000000..ca25d4b --- /dev/null +++ b/templates/hardhat/contracts/Counter.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.26; + +/// @title Counter +/// @notice Minimal state transition used to verify a Sunhat project setup. +contract Counter { + uint256 public number; + + event NumberChanged(uint256 indexed previousNumber, uint256 indexed newNumber); + + /// @notice Replaces the stored number. + function setNumber(uint256 newNumber) external { + uint256 previousNumber = number; + number = newNumber; + emit NumberChanged(previousNumber, newNumber); + } + + /// @notice Increments the stored number by one. + function increment() external { + uint256 previousNumber = number; + uint256 newNumber = previousNumber + 1; + number = newNumber; + emit NumberChanged(previousNumber, newNumber); + } +} diff --git a/templates/hardhat/scripts/deploy.ts b/templates/hardhat/scripts/deploy.ts new file mode 100644 index 0000000..070bd31 --- /dev/null +++ b/templates/hardhat/scripts/deploy.ts @@ -0,0 +1,12 @@ +import { ethers } from "hardhat"; + +async function main(): Promise { + const counter = await ethers.deployContract("Counter"); + await counter.waitForDeployment(); + console.log(await counter.getAddress()); +} + +main().catch((error: unknown) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/templates/hardhat/test/Counter.test.ts b/templates/hardhat/test/Counter.test.ts new file mode 100644 index 0000000..5a6ad6a --- /dev/null +++ b/templates/hardhat/test/Counter.test.ts @@ -0,0 +1,10 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; + +describe("Counter", function () { + it("increments", async function () { + const counter = await ethers.deployContract("Counter"); + await (await counter.increment()).wait(); + expect(await counter.number()).to.equal(1n); + }); +}); diff --git a/templates/hardhat/tsconfig.json b/templates/hardhat/tsconfig.json new file mode 100644 index 0000000..a2ca734 --- /dev/null +++ b/templates/hardhat/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "types": ["node", "mocha"] + }, + "include": ["hardhat.config.ts", "scripts", "test"] +} diff --git a/test/cli.test.js b/test/cli.test.js new file mode 100644 index 0000000..16a1464 --- /dev/null +++ b/test/cli.test.js @@ -0,0 +1,113 @@ +import assert from 'node:assert/strict'; +import { createHash } from 'node:crypto'; +import { chmodSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { dirname, resolve } from 'node:path'; +import { spawnSync } from 'node:child_process'; +import test from 'node:test'; + +const cli = resolve('bin/sunhat.js'); +function temp(name) { return mkdtempSync(resolve(tmpdir(), `sunhat-${name}-`)); } +function run(cwd, args) { return spawnSync(process.execPath, [cli, ...args], { cwd, encoding: 'utf8' }); } +function json(path, value) { mkdirSync(dirname(path), { recursive: true }); writeFileSync(path, `${JSON.stringify(value)}\n`); } +function binding(root, framework, target) { + writeFileSync(resolve(root, 'sunhat.toml'), `[project]\nframework = "${framework}"\ntarget = "${target}"\n`); + json(resolve(root, 'package.json'), { private: true, devDependencies: framework === 'hardhat' ? { hardhat: '2.22.0' } : {} }); +} +function executable(path, body) { mkdirSync(dirname(path), { recursive: true }); writeFileSync(path, `#!/usr/bin/env node\n${body}\n`); chmodSync(path, 0o755); } +function hardhat(root, version = '2.22.0') { + const base = resolve(root, 'node_modules/hardhat'); json(resolve(base, 'package.json'), { name: 'hardhat', version, bin: { hardhat: 'cli.js' } }); + executable(resolve(base, 'cli.js'), `process.stdout.write(JSON.stringify(process.argv.slice(2))); process.exitCode = 17;`); +} +function foundry(root, target) { + const base = resolve(root, `.sunhat/toolchains/${target}`); const binaries = {}; + for (const tool of ['forge', 'cast', 'anvil', 'chisel']) { const path = resolve(base, tool); executable(path, `process.stdout.write('${tool}:'+JSON.stringify(process.argv.slice(2)));`); binaries[tool] = { path: `.sunhat/toolchains/${target}/${tool}`, sha256: createHash('sha256').update(readFileSync(path)).digest('hex') }; } + json(resolve(root, '.sunhat/toolchain.json'), { version: 1, target, source: target === 'evm' ? 'foundry-rs/foundry' : 'elsvv/foundry-tron', release: target === 'evm' ? 'v1.8.6' : 'foundry-tron-latest', revision: target === 'evm' ? 'v1.8.6' : '9ea07db4b342fd606f6f7c3f99be1757e90d5e90', platform: 'test', binaries }); +} + +test('init defaults to Foundry and TRON', () => { + const root = temp('default-foundry'); const result = run(dirname(root), ['init', root]); assert.equal(result.status, 0, result.stderr); + assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /framework = "foundry"/u); + assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /target = "tron"/u); + assert.match(readFileSync(resolve(root, 'foundry.toml'), 'utf8'), /network = "tron"/u); + assert.equal(JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8')).scripts.build, 'sunhat build'); + const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); + assert.match(readme, /Foundry TRON Project with Sunhat/u); +}); +test('init accepts an explicit Foundry EVM target', () => { + const root = temp('explicit-foundry'); const result = run(dirname(root), ['init', '--framework', 'foundry', '--target', 'evm', root]); assert.equal(result.status, 0, result.stderr); + assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /framework = "foundry"/u); + assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /target = "evm"/u); + const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); + assert.match(readme, /Foundry EVM Project with Sunhat/u); + assert.doesNotMatch(readme, /network = "tron"/u); +}); +test('Hardhat scaffold requires explicit framework and refuses overwrite', () => { + const root = temp('init'); const result = run(dirname(root), ['init', '--framework', 'hardhat', '--target', 'evm', root]); assert.equal(result.status, 0, result.stderr); + assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /framework = "hardhat"/u); + const pkg = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8')); + assert.doesNotMatch(JSON.stringify(pkg), /hardhat-tron/u); + assert.equal(pkg.devDependencies.sunhat, `file:${process.cwd()}`); + assert.equal(pkg.scripts.build, 'sunhat compile'); + const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); + assert.match(readme, /Hardhat EVM Project with Sunhat/u); + assert.doesNotMatch(readme, /TRE_URL/u); + assert.equal(run(dirname(root), ['init', '--framework', 'hardhat', '--target', 'evm', root]).status, 2); +}); +test('TRON Hardhat scaffold selects TRE and loads its ethers bridge last', () => { + const root = temp('hardhat-tron'); const result = run(dirname(root), ['init', '--framework', 'hardhat', root]); assert.equal(result.status, 0, result.stderr); + assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /target = "tron"/u); + const config = readFileSync(resolve(root, 'hardhat.config.ts'), 'utf8'); + assert.ok(config.indexOf('@nomicfoundation/hardhat-ethers') < config.indexOf('@openzeppelin/hardhat-tron')); + assert.match(config, /defaultNetwork: "tre"/u); + assert.match(config, /tron: true/u); + assert.match(config, /compiler: \{ target: "tron" \}/u); + assert.match(config, /0x0{63}1/u); + const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); + assert.match(readme, /Hardhat TRON Project with Sunhat/u); + assert.match(readme, /TRE_URL/u); +}); +test('init rejects an invalid framework', () => { const result = run(temp('framework'), ['init', '--framework', 'unknown', '--target', 'evm']); assert.equal(result.status, 2); assert.match(result.stderr, /framework requires foundry or hardhat/u); }); +test('help reports the TRON target default', () => { + const result = run(temp('help'), ['init', '--help']); assert.equal(result.status, 0, result.stderr); assert.match(result.stdout, /target=tron/u); +}); +test('scaffold conflict is detected before any write', () => { + const root = temp('atomic'); mkdirSync(resolve(root, 'contracts')); writeFileSync(resolve(root, 'contracts/Counter.sol'), 'owned'); + const result = run(dirname(root), ['init', '--framework', 'hardhat', '--target', 'evm', root]); assert.equal(result.status, 2); + assert.equal(readFileSync(resolve(root, 'contracts/Counter.sol'), 'utf8'), 'owned'); assert.throws(() => readFileSync(resolve(root, 'package.json'))); +}); +test('foundry scaffold does not reference unpublished placeholder packages', () => { + const root = temp('foundry-init'); const result = run(dirname(root), ['init', root]); assert.equal(result.status, 0, result.stderr); + const pkg = readFileSync(resolve(root, 'package.json'), 'utf8'); assert.doesNotMatch(pkg, /@sunhat\/foundry-tron-toolchain/u); assert.match(pkg, /elsvv\/foundry-tron/u); + assert.doesNotMatch(readFileSync(resolve(root, 'script/Counter.s.sol'), 'utf8'), /forge-std/u); + assert.doesNotMatch(readFileSync(resolve(root, 'test/Counter.t.sol'), 'utf8'), /forge-std/u); +}); +test('adopt writes only the binding', () => { + const root = temp('adopt'); const config = 'export default { solidity: "0.8.26" };\n'; writeFileSync(resolve(root, 'hardhat.config.ts'), config); json(resolve(root, 'package.json'), { devDependencies: { hardhat: '2.22.0' } }); + const result = run(root, ['init', '--framework', 'hardhat', '--adopt']); assert.equal(result.status, 0, result.stderr); assert.equal(readFileSync(resolve(root, 'hardhat.config.ts'), 'utf8'), config); + assert.match(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), /target = "tron"/u); +}); +test('hardhat receives literal argv and native exit code', () => { + const root = temp('hh'); binding(root, 'hardhat', 'evm'); hardhat(root); const result = run(root, ['compile', '$HOME', 'test argument']); + assert.equal(result.status, 17); assert.equal(result.stdout, '["compile","$HOME","test argument"]'); +}); +test('legacy framework namespaces are rejected', () => { const result = run(temp('legacy'), ['foundry', 'build']); assert.equal(result.status, 2); assert.match(result.stderr, /namespace is no longer supported.*sunhat build/u); }); +test('Hardhat commands are passed through without a namespace', () => { + const root = temp('hh-toolchain'); binding(root, 'hardhat', 'evm'); hardhat(root); + const result = run(root, ['toolchain', 'check']); + assert.equal(result.status, 17); assert.equal(result.stdout, '["toolchain","check"]'); +}); +test('foundry native commands and tools select exact binaries', () => { + const root = temp('foundry'); binding(root, 'foundry', 'evm'); foundry(root, 'evm'); + assert.equal(run(root, ['build', '--sizes']).stdout, 'forge:["build","--sizes"]'); + assert.equal(run(root, ['compile', '--force']).stdout, 'forge:["compile","--force"]'); + assert.equal(run(root, ['cast', 'block-number']).stdout, 'cast:["block-number"]'); + const info = run(root, ['toolchain', 'info']); + assert.equal(info.status, 0); assert.match(info.stdout, /source=foundry-rs\/foundry/u); assert.match(info.stdout, /release=v1\.8\.6/u); +}); +test('TRON rejects anvil without launching toolchain', () => { const root = temp('tron'); binding(root, 'foundry', 'tron'); const result = run(root, ['anvil']); assert.equal(result.status, 2); assert.match(result.stderr, /unsupported.*TRON/u); }); +test('Hardhat 3 is rejected with resolved version', () => { const root = temp('hh3'); binding(root, 'hardhat', 'evm'); hardhat(root, '3.0.0'); const result = run(root, ['test']); assert.equal(result.status, 3); assert.match(result.stderr, /Hardhat 2.*3\.0\.0/u); }); +test('tampered toolchain binary is rejected', () => { + const root = temp('digest'); binding(root, 'foundry', 'evm'); foundry(root, 'evm'); writeFileSync(resolve(root, '.sunhat/toolchains/evm/forge'), 'tampered'); + const result = run(root, ['build']); assert.equal(result.status, 3); assert.match(result.stderr, /digest mismatch/u); +}); diff --git a/test/fixture-projects/hardhat-project/.gitignore b/test/fixture-projects/hardhat-project/.gitignore deleted file mode 100644 index 4a4ecc5..0000000 --- a/test/fixture-projects/hardhat-project/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -cache/ -artifacts/ diff --git a/test/fixture-projects/hardhat-project/contracts/Lock.sol b/test/fixture-projects/hardhat-project/contracts/Lock.sol deleted file mode 100644 index ac6c52d..0000000 --- a/test/fixture-projects/hardhat-project/contracts/Lock.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.23; - -// Uncomment this line to use console.log -// import "hardhat/console.sol"; - -contract Lock { - uint public unlockTime; - address payable public owner; - - event Withdrawal(uint amount, uint when); - - constructor(uint _unlockTime) payable { - require( - block.timestamp < _unlockTime, - "Unlock time should be in the future" - ); - - unlockTime = _unlockTime; - owner = payable(msg.sender); - } - - function withdraw() public { - // Uncomment this line, and the import of "hardhat/console.sol", to print a log in your terminal - // console.log("Unlock time is %o and block timestamp is %o", unlockTime, block.timestamp); - - require(block.timestamp >= unlockTime, "You can't withdraw yet"); - require(msg.sender == owner, "You aren't the owner"); - - emit Withdrawal(address(this).balance, block.timestamp); - - owner.transfer(address(this).balance); - } -} diff --git a/test/fixture-projects/hardhat-project/contracts/depositer.vy b/test/fixture-projects/hardhat-project/contracts/depositer.vy deleted file mode 100644 index 58d547c..0000000 --- a/test/fixture-projects/hardhat-project/contracts/depositer.vy +++ /dev/null @@ -1,414 +0,0 @@ -# @version ^0.2.8 -""" -@title "Zap" Depositer for metapool -@author Curve.Fi -@license Copyright (c) Curve.Fi, 2020 - all rights reserved -""" - -from vyper.interfaces import ERC20 - -interface CurveMeta: - def add_liquidity(amounts: uint256[N_COINS], min_mint_amount: uint256) -> uint256: nonpayable - def remove_liquidity(_amount: uint256, min_amounts: uint256[N_COINS]) -> uint256[N_COINS]: nonpayable - def remove_liquidity_one_coin(_token_amount: uint256, i: int128, min_amount: uint256) -> uint256: nonpayable - def remove_liquidity_imbalance(amounts: uint256[N_COINS], max_burn_amount: uint256) -> uint256: nonpayable - def calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: view - def calc_token_amount(amounts: uint256[N_COINS], deposit: bool) -> uint256: view - def base_pool() -> address: view - def coins(i: uint256) -> address: view - -interface CurveBase: - def add_liquidity(amounts: uint256[BASE_N_COINS], min_mint_amount: uint256): nonpayable - def remove_liquidity(_amount: uint256, min_amounts: uint256[BASE_N_COINS]): nonpayable - #def remove_liquidity_one_coin(_token_amount: uint256, i: int128, min_amount: uint256): nonpayable - def remove_liquidity_imbalance(amounts: uint256[BASE_N_COINS], max_burn_amount: uint256): nonpayable - #def calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: view - def calc_token_amount(amounts: uint256[BASE_N_COINS], deposit: bool) -> uint256: view - def coins(i: uint256) -> address: view - def fee() -> uint256: view - - -N_COINS: constant(int128) = 2 -MAX_COIN: constant(int128) = N_COINS-1 -BASE_N_COINS: constant(int128) = 3 -N_ALL_COINS: constant(int128) = N_COINS + BASE_N_COINS - 1 - -FEE_DENOMINATOR: constant(uint256) = 10 ** 10 -FEE_IMPRECISION: constant(uint256) = 100 * 10 ** 8 # % of the fee - - -pool: public(address) -token: public(address) -base_pool: public(address) -base_lp: public(address) - -coins: public(address[N_COINS]) -base_coins: public(address[BASE_N_COINS]) -initialed: public(bool) - - -@external -def initial(_pool: address, _token: address, _base_lp: address): - """ - @notice Contract constructor - @param _pool Metapool address - @param _token Pool LP token address - """ - - assert self.initialed == False - - self.initialed = True - self.pool = _pool - self.token = _token - base_pool: address = CurveMeta(_pool).base_pool() - self.base_pool = base_pool - self.base_lp = _base_lp - - # approve baselp for basepool - _resp: Bytes[32] = raw_call( - _base_lp, - concat( - method_id("approve(address,uint256)"), - convert(base_pool, bytes32), - convert(MAX_UINT256, bytes32), - ), - max_outsize=32, - ) - - for i in range(N_COINS): - coin: address = CurveMeta(_pool).coins(i) - self.coins[i] = coin - # approve coins for infinite transfers - _response: Bytes[32] = raw_call( - coin, - concat( - method_id("approve(address,uint256)"), - convert(_pool, bytes32), - convert(MAX_UINT256, bytes32), - ), - max_outsize=32, - ) - if len(_response) > 0: - assert convert(_response, bool) - - for i in range(BASE_N_COINS): - coin: address = CurveBase(base_pool).coins(i) - self.base_coins[i] = coin - # approve underlying coins for infinite transfers - _response: Bytes[32] = raw_call( - coin, - concat( - method_id("approve(address,uint256)"), - convert(base_pool, bytes32), - convert(MAX_UINT256, bytes32), - ), - max_outsize=32, - ) - if len(_response) > 0: - assert convert(_response, bool) - -@internal -def call_remove_liquidity_one_coin(_token_amount: uint256, i: int128, min_amount: uint256) : - result: Bytes[32] = raw_call( - self.base_pool, - concat( - method_id('remove_liquidity_one_coin(uint256,uint128,uint256)'), - convert(_token_amount, bytes32), - convert(i, bytes32), - convert(min_amount, bytes32) - ), - max_outsize=32, - is_static_call=False - ) - -@view -@internal -def call_calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: - result: Bytes[32] = raw_call( - self.base_pool, - concat( - method_id('calc_withdraw_one_coin(uint256,uint128)'), - convert(_token_amount, bytes32), - convert(i, bytes32) - ), - max_outsize=32, - is_static_call=True - ) - return convert(extract32(result, 0), uint256) - - -@external -def add_liquidity(_amounts: uint256[N_ALL_COINS], _min_mint_amount: uint256) -> uint256: - """ - @notice Wrap underlying coins and deposit them in the pool - @param _amounts List of amounts of underlying coins to deposit - @param _min_mint_amount Minimum amount of LP tokens to mint from the deposit - @return Amount of LP tokens received by depositing - """ - meta_amounts: uint256[N_COINS] = empty(uint256[N_COINS]) - base_amounts: uint256[BASE_N_COINS] = empty(uint256[BASE_N_COINS]) - deposit_base: bool = False - - # Transfer all coins in - for i in range(N_ALL_COINS): - amount: uint256 = _amounts[i] - if amount == 0: - continue - coin: address = ZERO_ADDRESS - if i < MAX_COIN: - coin = self.coins[i] - meta_amounts[i] = amount - else: - x: int128 = i - MAX_COIN - coin = self.base_coins[x] - base_amounts[x] = amount - deposit_base = True - # "safeTransferFrom" which works for ERC20s which return bool or not - _response: Bytes[32] = raw_call( - coin, - concat( - method_id("transferFrom(address,address,uint256)"), - convert(msg.sender, bytes32), - convert(self, bytes32), - convert(amount, bytes32), - ), - max_outsize=32, - ) # dev: failed transfer - if i != 3: - if len(_response) > 0: - assert convert(_response, bool) # dev: failed transfer - - # Deposit to the base pool - if deposit_base: - CurveBase(self.base_pool).add_liquidity(base_amounts, 0) - meta_amounts[MAX_COIN] = ERC20(self.coins[MAX_COIN]).balanceOf(self) - - # Deposit to the meta pool - CurveMeta(self.pool).add_liquidity(meta_amounts, _min_mint_amount) - - # Transfer meta token back - lp_token: address = self.token - lp_amount: uint256 = ERC20(lp_token).balanceOf(self) - assert ERC20(lp_token).transfer(msg.sender, lp_amount) - return lp_amount - - -@external -def remove_liquidity(_amount: uint256, _min_amounts: uint256[N_ALL_COINS]) -> uint256[N_ALL_COINS]: - """ - @notice Withdraw and unwrap coins from the pool - @dev Withdrawal amounts are based on current deposit ratios - @param _amount Quantity of LP tokens to burn in the withdrawal - @param _min_amounts Minimum amounts of underlying coins to receive - @return List of amounts of underlying coins that were withdrawn - """ - _token: address = self.token - assert ERC20(_token).transferFrom(msg.sender, self, _amount) - - min_amounts_meta: uint256[N_COINS] = empty(uint256[N_COINS]) - min_amounts_base: uint256[BASE_N_COINS] = empty(uint256[BASE_N_COINS]) - amounts: uint256[N_ALL_COINS] = empty(uint256[N_ALL_COINS]) - - # Withdraw from meta - for i in range(MAX_COIN): - min_amounts_meta[i] = _min_amounts[i] - CurveMeta(self.pool).remove_liquidity(_amount, min_amounts_meta) - - # Withdraw from base - _base_amount: uint256 = ERC20(self.coins[MAX_COIN]).balanceOf(self) - for i in range(BASE_N_COINS): - min_amounts_base[i] = _min_amounts[MAX_COIN+i] - CurveBase(self.base_pool).remove_liquidity(_base_amount, min_amounts_base) - - # Transfer all coins out - for i in range(N_ALL_COINS): - coin: address = ZERO_ADDRESS - if i < MAX_COIN: - coin = self.coins[i] - else: - coin = self.base_coins[i - MAX_COIN] - amounts[i] = ERC20(coin).balanceOf(self) - # "safeTransfer" which works for ERC20s which return bool or not - _response: Bytes[32] = raw_call( - coin, - concat( - method_id("transfer(address,uint256)"), - convert(msg.sender, bytes32), - convert(amounts[i], bytes32), - ), - max_outsize=32, - ) # dev: failed transfer - - if i!= 3: - if len(_response) > 0: - assert convert(_response, bool) # dev: failed transfer - # end "safeTransfer" - - return amounts - - -@external -def remove_liquidity_one_coin(_token_amount: uint256, i: int128, _min_amount: uint256) -> uint256: - """ - @notice Withdraw and unwrap a single coin from the pool - @param _token_amount Amount of LP tokens to burn in the withdrawal - @param i Index value of the coin to withdraw - @param _min_amount Minimum amount of underlying coin to receive - @return Amount of underlying coin received - """ - assert ERC20(self.token).transferFrom(msg.sender, self, _token_amount) - - coin: address = ZERO_ADDRESS - if i < MAX_COIN: - coin = self.coins[i] - # Withdraw a metapool coin - CurveMeta(self.pool).remove_liquidity_one_coin(_token_amount, i, _min_amount) - else: - coin = self.base_coins[i - MAX_COIN] - # Withdraw a base pool coin - CurveMeta(self.pool).remove_liquidity_one_coin(_token_amount, MAX_COIN, 0) - self.call_remove_liquidity_one_coin( - ERC20(self.coins[MAX_COIN]).balanceOf(self), i-MAX_COIN, _min_amount - ) - - # Tranfer the coin out - coin_amount: uint256 = ERC20(coin).balanceOf(self) - # "safeTransfer" which works for ERC20s which return bool or not - _response: Bytes[32] = raw_call( - coin, - concat( - method_id("transfer(address,uint256)"), - convert(msg.sender, bytes32), - convert(coin_amount, bytes32), - ), - max_outsize=32, - ) # dev: failed transfer - if i !=3: - if len(_response) > 0: - assert convert(_response, bool) # dev: failed transfer - # end "safeTransfer" - - return coin_amount - - -@external -def remove_liquidity_imbalance(_amounts: uint256[N_ALL_COINS], _max_burn_amount: uint256) -> uint256: - """ - @notice Withdraw coins from the pool in an imbalanced amount - @param _amounts List of amounts of underlying coins to withdraw - @param _max_burn_amount Maximum amount of LP token to burn in the withdrawal - @return Actual amount of the LP token burned in the withdrawal - """ - base_pool: address = self.base_pool - meta_pool: address = self.pool - base_coins: address[BASE_N_COINS] = self.base_coins - meta_coins: address[N_COINS] = self.coins - lp_token: address = self.token - - fee: uint256 = CurveBase(base_pool).fee() * BASE_N_COINS / (4 * (BASE_N_COINS - 1)) - fee += fee * FEE_IMPRECISION / FEE_DENOMINATOR # Overcharge to account for imprecision - - # Transfer the LP token in - assert ERC20(lp_token).transferFrom(msg.sender, self, _max_burn_amount) - - withdraw_base: bool = False - amounts_base: uint256[BASE_N_COINS] = empty(uint256[BASE_N_COINS]) - amounts_meta: uint256[N_COINS] = empty(uint256[N_COINS]) - leftover_amounts: uint256[N_COINS] = empty(uint256[N_COINS]) - - # Prepare quantities - for i in range(MAX_COIN): - amounts_meta[i] = _amounts[i] - - for i in range(BASE_N_COINS): - amount: uint256 = _amounts[MAX_COIN + i] - if amount != 0: - amounts_base[i] = amount - withdraw_base = True - - if withdraw_base: - amounts_meta[MAX_COIN] = CurveBase(self.base_pool).calc_token_amount(amounts_base, False) - amounts_meta[MAX_COIN] += amounts_meta[MAX_COIN] * fee / FEE_DENOMINATOR + 1 - - # Remove liquidity and deposit leftovers back - CurveMeta(meta_pool).remove_liquidity_imbalance(amounts_meta, _max_burn_amount) - if withdraw_base: - CurveBase(base_pool).remove_liquidity_imbalance(amounts_base, amounts_meta[MAX_COIN]) - leftover_amounts[MAX_COIN] = ERC20(meta_coins[MAX_COIN]).balanceOf(self) - if leftover_amounts[MAX_COIN] > 0: - CurveMeta(meta_pool).add_liquidity(leftover_amounts, 0) - - # Transfer all coins out - for i in range(N_ALL_COINS): - coin: address = ZERO_ADDRESS - amount: uint256 = 0 - if i < MAX_COIN: - coin = meta_coins[i] - amount = amounts_meta[i] - else: - coin = base_coins[i - MAX_COIN] - amount = amounts_base[i - MAX_COIN] - # "safeTransfer" which works for ERC20s which return bool or not - if amount > 0: - _response: Bytes[32] = raw_call( - coin, - concat( - method_id("transfer(address,uint256)"), - convert(msg.sender, bytes32), - convert(amount, bytes32), - ), - max_outsize=32, - ) # dev: failed transfer - if i !=3: - if len(_response) > 0: - assert convert(_response, bool) # dev: failed transfer - # end "safeTransfer" - - # Transfer the leftover LP token out - leftover: uint256 = ERC20(lp_token).balanceOf(self) - if leftover > 0: - assert ERC20(lp_token).transfer(msg.sender, leftover) - - return _max_burn_amount - leftover - - -@view -@external -def calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: - """ - @notice Calculate the amount received when withdrawing and unwrapping a single coin - @param _token_amount Amount of LP tokens to burn in the withdrawal - @param i Index value of the underlying coin to withdraw - @return Amount of coin received - """ - if i < MAX_COIN: - return CurveMeta(self.pool).calc_withdraw_one_coin(_token_amount, i) - else: - base_tokens: uint256 = CurveMeta(self.pool).calc_withdraw_one_coin(_token_amount, MAX_COIN) - return self.call_calc_withdraw_one_coin(base_tokens, i-MAX_COIN) - - -@view -@external -def calc_token_amount(_amounts: uint256[N_ALL_COINS], _is_deposit: bool) -> uint256: - """ - @notice Calculate addition or reduction in token supply from a deposit or withdrawal - @dev This calculation accounts for slippage, but not fees. - Needed to prevent front-running, not for precise calculations! - @param _amounts Amount of each underlying coin being deposited - @param _is_deposit set True for deposits, False for withdrawals - @return Expected amount of LP tokens received - """ - meta_amounts: uint256[N_COINS] = empty(uint256[N_COINS]) - base_amounts: uint256[BASE_N_COINS] = empty(uint256[BASE_N_COINS]) - - for i in range(MAX_COIN): - meta_amounts[i] = _amounts[i] - - for i in range(BASE_N_COINS): - base_amounts[i] = _amounts[i + MAX_COIN] - - base_tokens: uint256 = CurveBase(self.base_pool).calc_token_amount(base_amounts, _is_deposit) - meta_amounts[MAX_COIN] = base_tokens - - return CurveMeta(self.pool).calc_token_amount(meta_amounts, _is_deposit) diff --git a/test/fixture-projects/hardhat-project/hardhat.config.ts b/test/fixture-projects/hardhat-project/hardhat.config.ts deleted file mode 100644 index d683934..0000000 --- a/test/fixture-projects/hardhat-project/hardhat.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -// We load the plugin here. -import '../../../src/index'; - -import { HardhatUserConfig } from 'hardhat/types'; - -const config: HardhatUserConfig = { - solidity: { - version: '0.7.3', - }, - defaultNetwork: 'hardhat', - networks: { - tron: { - url: `http://127.0.0.1:9090/jsonrpc`, - tron: true, - }, - }, -}; - -export default config; diff --git a/test/fixtures/toolchain-download.js b/test/fixtures/toolchain-download.js new file mode 100644 index 0000000..afcdeba --- /dev/null +++ b/test/fixtures/toolchain-download.js @@ -0,0 +1,8 @@ +import { writeFileSync } from 'node:fs'; + +// Keep install tests offline while exercising the CLI's real download handling. +globalThis.fetch = async (url) => { + writeFileSync(process.env.SUNHAT_TEST_DOWNLOAD_LOG, String(url)); + if (process.env.SUNHAT_TEST_DOWNLOAD === 'http-error') return new Response(null, { status: 503 }); + return new Response('invalid toolchain archive', { status: 200 }); +}; diff --git a/test/fixtures/toolchain-install-download.js b/test/fixtures/toolchain-install-download.js new file mode 100644 index 0000000..4f40e3a --- /dev/null +++ b/test/fixtures/toolchain-install-download.js @@ -0,0 +1,6 @@ +import { readFileSync, writeFileSync } from 'node:fs'; + +globalThis.fetch = async (url) => { + writeFileSync(process.env.SUNHAT_TEST_DOWNLOAD_LOG, String(url)); + return new Response(readFileSync(process.env.SUNHAT_TEST_ARCHIVE)); +}; diff --git a/test/fixtures/toolchain-install-faults.js b/test/fixtures/toolchain-install-faults.js new file mode 100644 index 0000000..d859434 --- /dev/null +++ b/test/fixtures/toolchain-install-faults.js @@ -0,0 +1,38 @@ +import fs from 'node:fs'; +import { syncBuiltinESMExports } from 'node:module'; +import { basename, isAbsolute, relative, resolve, sep } from 'node:path'; + +const root = process.env.SUNHAT_TEST_PROJECT_ROOT; +const toolchains = resolve(root, '.sunhat/toolchains'); +const destination = resolve(toolchains, process.env.SUNHAT_TEST_TARGET); +const lock = resolve(root, '.sunhat/toolchain.json'); +const mode = process.env.SUNHAT_TEST_INSTALL_FAULT; +const rename = fs.renameSync; +const write = fs.writeFileSync; + +function inside(parent, path) { + const child = relative(parent, path); + return !isAbsolute(child) && child !== '..' && !child.startsWith(`..${sep}`); +} + +// Model separate mounts for OS temp, project metadata and the toolchains folder. +function device(path) { return inside(toolchains, path) ? 'toolchains' : inside(root, path) ? 'project' : 'os-temp'; } +function failure(code) { return Object.assign(new Error(`injected ${mode} failure (${code})`), { code }); } + +fs.renameSync = (from, to) => { + fs.appendFileSync(process.env.SUNHAT_TEST_RENAME_LOG, `${JSON.stringify({ from, to })}\n`); + if (mode === 'cross-device' && device(from) !== device(to)) throw failure('EXDEV'); + const restoring = basename(from) === 'previous'; + if ((mode === 'activate' || mode === 'rollback') && inside(destination, to) && !inside(destination, from) && !restoring) throw failure('EIO'); + if (mode === 'rollback' && restoring) throw failure('EACCES'); + if (mode === 'lock' && to === lock) throw failure('EIO'); + return rename(from, to); +}; + +fs.writeFileSync = (path, ...args) => { + // Also fail the old direct-write implementation, before it can truncate its lock. + if (mode === 'lock' && path === lock) throw failure('EIO'); + return write(path, ...args); +}; + +syncBuiltinESMExports(); diff --git a/test/fixtures/toolchain-install-loader.js b/test/fixtures/toolchain-install-loader.js new file mode 100644 index 0000000..d5d205c --- /dev/null +++ b/test/fixtures/toolchain-install-loader.js @@ -0,0 +1,23 @@ +import { createHash } from 'node:crypto'; +import { readFileSync } from 'node:fs'; + +const releasesUrl = new URL('../../dist/toolchain/releases.js', import.meta.url).href; + +// Keep the production release names and binary mapping. Only replace the archive +// digest so installation can verify a small, locally generated archive offline. +export async function load(url, context, nextLoad) { + if (url !== releasesUrl) return nextLoad(url, context); + const digest = createHash('sha256').update(readFileSync(process.env.SUNHAT_TEST_ARCHIVE)).digest('hex'); + return { + format: 'module', + shortCircuit: true, + source: ` + import * as original from ${JSON.stringify(`${releasesUrl}?original`)}; + export const platformKey = original.platformKey; + export const releaseUrl = original.releaseUrl; + export function releaseFor(target) { + return { ...original.releaseFor(target), sha256: ${JSON.stringify(digest)} }; + } + `, + }; +} diff --git a/test/helpers.ts b/test/helpers.ts deleted file mode 100644 index 5623d51..0000000 --- a/test/helpers.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { resetHardhatContext } from 'hardhat/plugins-testing'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import path from 'path'; - -declare module 'mocha' { - interface Context { - env: HardhatRuntimeEnvironment; - } -} - -export function useEnvironment( - fixtureProjectName: string, - networkName = 'localhost' -): void { - beforeEach('Loading hardhat environment', function () { - process.chdir(path.join(__dirname, 'fixture-projects', fixtureProjectName)); - process.env.HARDHAT_NETWORK = networkName; - - try { - this.env = require('hardhat'); - // console.log(this.env); - } catch (error) { - console.error('Failed to load Hardhat environment:', error); - } - }); - - afterEach('Resetting hardhat', function () { - resetHardhatContext(); - }); -} - -export function useTronEnvironment( - fixtureProjectName: string, - networkName = 'tron' -): void { - beforeEach('Loading hardhat environment', function () { - process.chdir(path.join(__dirname, 'fixture-projects', fixtureProjectName)); - process.env.HARDHAT_NETWORK = networkName; - - try { - this.env = require('hardhat'); - // console.log(this.env); - } catch (error) { - console.error('Failed to load Hardhat environment:', error); - } - }); - - afterEach('Resetting hardhat', function () { - resetHardhatContext(); - }); -} diff --git a/test/init-commands.test.js b/test/init-commands.test.js new file mode 100644 index 0000000..9a8807b --- /dev/null +++ b/test/init-commands.test.js @@ -0,0 +1,249 @@ +import assert from 'node:assert/strict'; +import { createHash } from 'node:crypto'; +import { chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { dirname, resolve } from 'node:path'; +import { spawnSync } from 'node:child_process'; +import { fileURLToPath } from 'node:url'; +import test from 'node:test'; + +const repository = fileURLToPath(new URL('../', import.meta.url)); +const cli = resolve(repository, 'bin/sunhat.js'); +const downloadFixture = fileURLToPath(new URL('./fixtures/toolchain-download.js', import.meta.url)); +const version = JSON.parse(readFileSync(resolve(repository, 'package.json'), 'utf8')).version; +const releases = { + evm: { source: 'foundry-rs/foundry', release: 'v1.8.6', revision: 'v1.8.6' }, + tron: { source: 'elsvv/foundry-tron', release: 'foundry-tron-latest', revision: '9ea07db4b342fd606f6f7c3f99be1757e90d5e90' }, +}; + +// Cover the template commands and every routing branch. Native frameworks own +// their full task lists; these executables record dispatch without compiling or +// broadcasting transactions, starting servers, or requiring Docker/network access. +const hardhatCommands = [ + ['compile'], ['compile', '--force'], ['test'], ['test', '--grep', 'Counter'], + ['node'], ['run', 'scripts/deploy.ts'], ['clean'], ['console', '--no-compile'], + ['flatten', 'contracts/Counter.sol'], ['help', 'compile'], + ['toolchain', 'install'], ['toolchain', 'check'], ['toolchain', 'info'], + ['custom-plugin-task', '--flag', 'space value', '$HOME', '$(literal)', 'a;b', '', '--', '--literal'], +]; +const forgeCommands = [ + ['build'], ['build', '--sizes'], ['compile', '--force'], ['test'], ['test', '-vvv'], + ['test', '--match-contract', 'CounterTest'], ['test', '--gas-report'], + ['snapshot'], ['coverage'], ['script', 'script/Counter.s.sol:CounterScript'], + ['create', 'src/Counter.sol:Counter'], ['clean'], ['fmt', '--check'], + ['inspect', 'src/Counter.sol:Counter', 'abi'], ['help', 'build'], + ['custom-forge-command', '--flag', 'space value', '$HOME', '$(literal)', 'a;b', '', '--', '--literal'], +]; + +function run(cwd, args, { env = {}, preload = false } = {}) { + const nodeArgs = preload ? ['--import', downloadFixture] : []; + return spawnSync(process.execPath, [...nodeArgs, cli, ...args], { + cwd, encoding: 'utf8', timeout: 10_000, env: { ...process.env, ...env }, + }); +} + +function json(path, value) { + mkdirSync(dirname(path), { recursive: true }); + writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`); +} + +function project(t, framework, target) { + const temporary = mkdtempSync(resolve(tmpdir(), `sunhat-init-${framework}-${target}-`)); + t.after(() => rmSync(temporary, { recursive: true, force: true })); + const destination = resolve(temporary, 'project with spaces'); + const initialized = run(temporary, ['init', '--framework', framework, '--target', target, destination]); + assert.equal(initialized.status, 0, initialized.stderr); + const root = realpathSync(destination); + assert.equal(readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), `[project]\nframework = "${framework}"\ntarget = "${target}"\n`); + const nested = resolve(root, 'nested directory', 'contracts'); + mkdirSync(nested, { recursive: true }); + const log = resolve(temporary, 'invocations.jsonl'); + return { + root, nested, framework, target, log, + calls: () => existsSync(log) ? readFileSync(log, 'utf8').trim().split('\n').map(line => JSON.parse(line)) : [], + }; +} + +function recorder(path, project, tool) { + mkdirSync(dirname(path), { recursive: true }); + const identity = { framework: project.framework, target: project.target, tool }; + writeFileSync(path, `#!/usr/bin/env node +const call = { ...${JSON.stringify(identity)}, args: process.argv.slice(2), cwd: process.cwd() }; +require('node:fs').appendFileSync(${JSON.stringify(project.log)}, JSON.stringify(call) + '\\n'); +process.stdout.write(JSON.stringify(call)); +process.stderr.write(process.env.SUNHAT_TEST_STDERR ?? ''); +process.exitCode = Number(process.env.SUNHAT_TEST_EXIT_CODE ?? 0); +`); + chmodSync(path, 0o755); +} + +function installFrameworkFixture(project) { + if (project.framework === 'hardhat') { + const pkg = JSON.parse(readFileSync(resolve(project.root, 'package.json'), 'utf8')); + const base = resolve(project.root, 'node_modules/hardhat'); + json(resolve(base, 'package.json'), { name: 'hardhat', version: pkg.devDependencies.hardhat, bin: { hardhat: 'cli.cjs' } }); + recorder(resolve(base, 'cli.cjs'), project, 'hardhat'); + } else { + const binaries = {}; + for (const tool of ['forge', 'cast', 'anvil', 'chisel']) { + const filename = project.target === 'tron' ? `${tool}-tron` : tool; + const path = `.sunhat/toolchains/${project.target}/${filename}`; + recorder(resolve(project.root, path), project, tool); + binaries[tool] = { path, sha256: createHash('sha256').update(readFileSync(resolve(project.root, path))).digest('hex') }; + } + json(resolve(project.root, '.sunhat/toolchain.json'), { version: 1, target: project.target, ...releases[project.target], platform: 'test', binaries }); + } + // Expose the real CLI to the generated npm scripts without installing packages. + const bin = resolve(project.root, 'node_modules/.bin'); + mkdirSync(bin, { recursive: true }); + symlinkSync(cli, resolve(bin, 'sunhat')); +} + +function expectedCall(project, tool, args) { + return { framework: project.framework, target: project.target, tool, args, cwd: project.root }; +} + +function assertNative(project, cwd, args, tool, forwarded, env = {}) { + const before = project.calls().length; + const result = run(cwd, args, { env }); + assert.equal(result.status, Number(env.SUNHAT_TEST_EXIT_CODE ?? 0), result.stderr || String(result.error ?? '')); + assert.equal(result.stderr, env.SUNHAT_TEST_STDERR ?? ''); + const expected = expectedCall(project, tool, forwarded); + assert.deepEqual(JSON.parse(result.stdout), expected); + assert.deepEqual(project.calls().slice(before), [expected]); +} + +for (const framework of ['foundry', 'hardhat']) { + for (const target of ['evm', 'tron']) { + test(`init ${framework}/${target}: command matrix`, async (t) => { + const initialized = project(t, framework, target); + installFrameworkFixture(initialized); + const commands = framework === 'hardhat' + ? hardhatCommands.map(args => ({ args, tool: 'hardhat', forwarded: args })) + : [ + ...forgeCommands.map(args => ({ args, tool: 'forge', forwarded: args })), + { args: ['cast', 'block-number'], tool: 'cast', forwarded: ['block-number'] }, + { args: ['cast', 'call', 'contract with spaces', 'value()(uint256)'], tool: 'cast', forwarded: ['call', 'contract with spaces', 'value()(uint256)'] }, + ...(target === 'evm' ? [ + { args: ['anvil', '--port', '9545'], tool: 'anvil', forwarded: ['--port', '9545'] }, + { args: ['chisel', '--no-banner'], tool: 'chisel', forwarded: ['--no-banner'] }, + ] : []), + ]; + for (const { args, tool, forwarded } of commands) { + await t.test(args.join(' '), () => { + for (const cwd of [initialized.root, initialized.nested]) assertNative(initialized, cwd, args, tool, forwarded); + }); + } + + await t.test('generated npm build and test scripts', () => { + for (const script of ['build', 'test']) { + const before = initialized.calls().length; + const npmArgs = ['run', script, '--', 'literal argument']; + const result = process.env.npm_execpath + ? spawnSync(process.execPath, [process.env.npm_execpath, ...npmArgs], { cwd: initialized.nested, encoding: 'utf8', timeout: 10_000 }) + : spawnSync('npm', npmArgs, { cwd: initialized.nested, encoding: 'utf8', timeout: 10_000 }); + assert.equal(result.status, 0, result.stderr || String(result.error ?? '')); + const command = script === 'test' ? 'test' : framework === 'hardhat' ? 'compile' : 'build'; + assert.deepEqual(initialized.calls().slice(before), [expectedCall(initialized, framework === 'hardhat' ? 'hardhat' : 'forge', [command, 'literal argument'])]); + } + }); + + await t.test('preserves native failure exit status and stderr', () => { + const command = framework === 'hardhat' ? 'compile' : 'build'; + assertNative(initialized, initialized.nested, [command], framework === 'hardhat' ? 'hardhat' : 'forge', [command], { + SUNHAT_TEST_EXIT_CODE: '23', SUNHAT_TEST_STDERR: 'native compiler failure\n', + }); + }); + + await t.test('global help/version and legacy namespaces do not launch a framework', () => { + const before = initialized.calls().length; + for (const flag of ['--help', '-h']) { + const result = run(initialized.nested, [flag]); + assert.equal(result.status, 0, result.stderr); + assert.match(result.stdout, /sunhat /u); + } + for (const flag of ['--version', '-V']) { + const result = run(initialized.nested, [flag]); + assert.equal(result.status, 0, result.stderr); + assert.equal(result.stdout, `sunhat ${version}\n`); + } + for (const namespace of ['hardhat', 'foundry']) { + const result = run(initialized.nested, [namespace, 'test']); + assert.equal(result.status, 2, result.stderr); + assert.match(result.stderr, /namespace is no longer supported/u); + } + assert.equal(initialized.calls().length, before); + }); + + if (framework === 'foundry') { + await t.test('toolchain info/check use the initialized target without launching Forge', () => { + const before = initialized.calls().length; + for (const command of ['info', 'check']) { + const result = run(initialized.nested, ['toolchain', command]); + assert.equal(result.status, 0, result.stderr); + assert.equal(result.stdout, `framework=foundry\ntarget=${target}\nsource=${releases[target].source}\nrelease=${releases[target].release}\nrevision=${releases[target].revision}\nplatform=test\n`); + } + for (const args of [[], ['unknown'], ['check', '--extra'], ['install', 'extra']]) { + const result = run(initialized.nested, ['toolchain', ...args]); + assert.equal(result.status, 2, result.stderr); + assert.match(result.stderr, /toolchain requires exactly one command/u); + } + assert.equal(initialized.calls().length, before); + }); + + if (target === 'tron') { + await t.test('anvil/chisel are rejected before launching the installed binaries', () => { + const before = initialized.calls().length; + for (const tool of ['anvil', 'chisel']) { + const result = run(initialized.nested, [tool]); + assert.equal(result.status, 2, result.stderr); + assert.match(result.stderr, new RegExp(`${tool} is unsupported for the TRON target`, 'u')); + } + assert.equal(initialized.calls().length, before); + }); + } + + await t.test('toolchain check and native execution reject a tampered binary', () => { + const before = initialized.calls().length; + const lock = JSON.parse(readFileSync(resolve(initialized.root, '.sunhat/toolchain.json'), 'utf8')); + writeFileSync(resolve(initialized.root, lock.binaries.forge.path), 'tampered'); + for (const args of [['toolchain', 'check'], ['build']]) { + const result = run(initialized.nested, args); + assert.equal(result.status, 3, result.stderr); + assert.match(result.stderr, /digest mismatch/u); + } + assert.equal(initialized.calls().length, before); + }); + } + }); + } +} + +for (const target of ['evm', 'tron']) { + test(`init foundry/${target}: toolchain install download failures`, async (t) => { + const initialized = project(t, 'foundry', target); + await t.test('check/info/build report a missing toolchain', () => { + for (const args of [['toolchain', 'check'], ['toolchain', 'info'], ['build']]) { + const result = run(initialized.nested, args); + assert.equal(result.status, 3, result.stderr); + assert.match(result.stderr, /toolchain is not installed/u); + } + }); + for (const mode of ['http-error', 'digest-mismatch']) { + await t.test(mode, () => { + const log = resolve(initialized.root, 'download-url.txt'); + const result = run(initialized.nested, ['toolchain', 'install'], { + preload: true, env: { SUNHAT_TEST_DOWNLOAD: mode, SUNHAT_TEST_DOWNLOAD_LOG: log }, + }); + assert.equal(result.status, 3, result.stderr); + assert.match(result.stderr, mode === 'http-error' ? /download failed \(503\)/u : /archive digest mismatch/u); + const platform = `${process.platform}_${process.arch === 'x64' ? 'amd64' : process.arch}`; + const extension = process.platform === 'win32' ? 'zip' : 'tar.gz'; + const archive = target === 'evm' ? `foundry_v1.8.6_${platform}.${extension}` : `foundry-tron_${platform}.${extension}`; + assert.equal(readFileSync(log, 'utf8'), `https://github.com/${releases[target].source}/releases/download/${releases[target].release}/${archive}`); + assert.equal(existsSync(resolve(initialized.root, '.sunhat/toolchain.json')), false); + assert.equal(existsSync(resolve(initialized.root, '.sunhat/toolchains')), false); + }); + } + }); +} diff --git a/test/project.test.ts b/test/project.test.ts deleted file mode 100644 index d87fbd1..0000000 --- a/test/project.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { assert } from 'chai'; - -import { useEnvironment, useTronEnvironment } from './helpers'; - -describe('hardhat-deploy hre extension', function () { - useEnvironment('hardhat-project', 'hardhat'); - it('It should add the deployments field', function () { - assert.isNotNull(this.env.deployments); - }); - - it('The getChainId should give the correct chainId', async function () { - assert.equal(await this.env.network.config.chainId, 31337); - }); -}); - -describe('hardhat-deploy hre-tron extension', function () { - useTronEnvironment('hardhat-project', 'tron'); - it('It should add the deployments field', function () { - assert.isNotNull(this.env.deployments); - }); - - it('The Tron network flag should give the correct vaule', async function () { - assert.equal(await this.env.network.config.tron, true); - }); -}); diff --git a/test/template-types.test.js b/test/template-types.test.js new file mode 100644 index 0000000..d6759b4 --- /dev/null +++ b/test/template-types.test.js @@ -0,0 +1,30 @@ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import { mkdtempSync, readFileSync, rmSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import test from 'node:test'; + +const repository = fileURLToPath(new URL('../', import.meta.url)); +const cli = resolve(repository, 'bin/sunhat.js'); + +function run(args, cwd, timeout = 10_000) { + const result = spawnSync(process.execPath, args, { cwd, encoding: 'utf8', timeout, maxBuffer: 4 * 1024 * 1024 }); + assert.equal(result.status, 0, [result.error?.message, result.stdout, result.stderr].filter(Boolean).join('\n')); +} + +for (const target of ['evm', 'tron']) { + test(`Hardhat ${target} template passes tsc --noEmit with its declared dependencies`, { timeout: 180_000 }, (t) => { + assert.ok(process.env.npm_execpath, 'Run this integration suite with npm run test:templates'); + const temporary = mkdtempSync(resolve(tmpdir(), `sunhat-template-types-${target}-`)); + t.after(() => rmSync(temporary, { recursive: true, force: true })); + const project = resolve(temporary, 'project with spaces'); + run([cli, 'init', '--framework', 'hardhat', '--target', target, project], temporary); + // Use the generated package as-is, including its exact dependency versions. + run([process.env.npm_execpath, 'install', '--ignore-scripts', '--no-audit', '--no-fund'], project, 150_000); + const config = JSON.parse(readFileSync(resolve(project, 'tsconfig.json'), 'utf8')); + assert.notEqual(config.compilerOptions.skipLibCheck, true, 'Template type checks must include dependency declarations'); + run([resolve(project, 'node_modules/typescript/bin/tsc'), '--noEmit'], project, 30_000); + }); +} diff --git a/test/toolchain.test.js b/test/toolchain.test.js new file mode 100644 index 0000000..9e8c9fc --- /dev/null +++ b/test/toolchain.test.js @@ -0,0 +1,206 @@ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import { createHash } from 'node:crypto'; +import { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import test from 'node:test'; +import { releaseFor } from '../dist/toolchain/releases.js'; + +const repository = fileURLToPath(new URL('../', import.meta.url)); +const cli = resolve(repository, 'bin/sunhat.js'); +const loader = new URL('./fixtures/toolchain-install-loader.js', import.meta.url).href; +const download = new URL('./fixtures/toolchain-install-download.js', import.meta.url).href; +const faults = new URL('./fixtures/toolchain-install-faults.js', import.meta.url).href; +const tools = ['forge', 'cast', 'anvil', 'chisel']; + +function releaseOn(target, platform, arch) { + const platformDescriptor = Object.getOwnPropertyDescriptor(process, 'platform'); + const archDescriptor = Object.getOwnPropertyDescriptor(process, 'arch'); + try { + Object.defineProperty(process, 'platform', { value: platform }); + Object.defineProperty(process, 'arch', { value: arch }); + return releaseFor(target); + } finally { + Object.defineProperty(process, 'platform', platformDescriptor); + Object.defineProperty(process, 'arch', archDescriptor); + } +} + +function writeArchive(fixture, { label = 'fixture', missingTool } = {}) { + const { target, source, archive } = fixture; + const windows = process.platform === 'win32'; + rmSync(source, { recursive: true, force: true }); mkdirSync(source); + rmSync(archive, { force: true }); + fixture.contents = Object.fromEntries(tools.filter(tool => tool !== missingTool).map(tool => [`${tool}${target === 'tron' ? '-tron' : ''}${windows ? '.exe' : ''}`, Buffer.from(`${process.platform} ${target} ${tool} ${label}\n`)])); + for (const [filename, bytes] of Object.entries(fixture.contents)) writeFileSync(resolve(source, filename), bytes); + const literal = value => `'${value.replaceAll("'", "''")}'`; + const files = Object.keys(fixture.contents).map(filename => literal(resolve(source, filename))).join(', '); + const compressed = windows + ? spawnSync('powershell.exe', ['-NoProfile', '-Command', `$ErrorActionPreference = 'Stop'; Compress-Archive -LiteralPath @(${files}) -DestinationPath ${literal(archive)}`], { encoding: 'utf8', timeout: 30_000 }) + : spawnSync('tar', ['-czf', archive, '-C', source, ...Object.keys(fixture.contents)], { encoding: 'utf8', timeout: 30_000 }); + assert.equal(compressed.status, 0, compressed.stderr || String(compressed.error ?? '')); +} + +function installFixture(t, target, directory = tmpdir()) { + const temporary = realpathSync(mkdtempSync(resolve(directory, `sunhat-install-${target}-`))); + t.after(() => rmSync(temporary, { recursive: true, force: true })); + const fixture = { + temporary, target, root: resolve(temporary, 'project with spaces'), + source: resolve(temporary, 'archive source'), + archive: resolve(temporary, process.platform === 'win32' ? 'toolchain.zip' : 'toolchain.tar.gz'), + log: resolve(temporary, 'download-url.txt'), renameLog: resolve(temporary, 'renames.jsonl'), + }; + writeArchive(fixture); + const initialized = spawnSync(process.execPath, [cli, 'init', '--target', target, fixture.root], { encoding: 'utf8', timeout: 10_000 }); + assert.equal(initialized.status, 0, initialized.stderr || String(initialized.error ?? '')); + return fixture; +} + +function install(fixture, fault) { + return spawnSync(process.execPath, ['--experimental-loader', loader, '--import', download, ...(fault ? ['--import', faults] : []), cli, 'toolchain', 'install'], { + cwd: fixture.root, encoding: 'utf8', timeout: 30_000, + env: { + ...process.env, SUNHAT_TEST_ARCHIVE: fixture.archive, SUNHAT_TEST_DOWNLOAD_LOG: fixture.log, + SUNHAT_TEST_PROJECT_ROOT: fixture.root, SUNHAT_TEST_TARGET: fixture.target, + SUNHAT_TEST_INSTALL_FAULT: fault ?? '', SUNHAT_TEST_RENAME_LOG: fixture.renameLog, + }, + }); +} + +function assertInstalled(result) { assert.equal(result.status, 0, result.stderr || String(result.error ?? '')); } + +function snapshot(root) { + const lock = readFileSync(resolve(root, '.sunhat/toolchain.json')); + return { lock, binaries: Object.fromEntries(Object.values(JSON.parse(lock).binaries).map(item => [item.path, readFileSync(resolve(root, item.path))])) }; +} + +function assertPreserved(root, previous) { + assert.deepEqual(readFileSync(resolve(root, '.sunhat/toolchain.json')), previous.lock); + for (const [path, bytes] of Object.entries(previous.binaries)) assert.deepEqual(readFileSync(resolve(root, path)), bytes); + assertInstalled(spawnSync(process.execPath, [cli, 'toolchain', 'check'], { cwd: root, encoding: 'utf8', timeout: 10_000 })); +} + +function assertClean(root, target) { + assert.deepEqual(readdirSync(resolve(root, '.sunhat')).sort(), ['toolchain.json', 'toolchains']); + assert.deepEqual(readdirSync(resolve(root, '.sunhat/toolchains')), [target]); +} + +for (const target of ['evm', 'tron']) { + for (const [platform, arch] of [['win32', 'x64'], ['darwin', 'arm64'], ['darwin', 'x64'], ['linux', 'arm64'], ['linux', 'x64']]) { + test(`${target} release filenames on ${platform}/${arch}`, () => { + const release = releaseOn(target, platform, arch); + const suffix = `${target === 'tron' ? '-tron' : ''}${platform === 'win32' ? '.exe' : ''}`; + assert.deepEqual(release.tools, Object.fromEntries(tools.map(tool => [tool, `${tool}${suffix}`]))); + const prefix = target === 'evm' ? 'foundry_v1.8.6' : 'foundry-tron'; + assert.equal(release.archive, `${prefix}_${platform}_${arch === 'x64' ? 'amd64' : arch}.${platform === 'win32' ? 'zip' : 'tar.gz'}`); + }); + } + + test(`${process.platform} ${target} archive installs all executables and verifies the lock`, (t) => { + const windows = process.platform === 'win32'; + const fixture = installFixture(t, target); + const { root, log, contents } = fixture; + assertInstalled(install(fixture)); + const release = releaseFor(target); + assert.equal(readFileSync(log, 'utf8'), `https://github.com/${release.source}/releases/download/${release.release}/${release.archive}`); + const lock = JSON.parse(readFileSync(resolve(root, '.sunhat/toolchain.json'), 'utf8')); + assert.equal(lock.version, 1); + assert.equal(lock.target, target); + assert.equal(lock.platform, `${process.platform}-${process.arch === 'x64' ? 'amd64' : process.arch}`); + assert.equal(lock.source, release.source); + assert.equal(lock.release, release.release); + assert.equal(lock.revision, release.revision); + assert.deepEqual(Object.keys(lock.binaries).sort(), [...tools].sort()); + assert.deepEqual(readdirSync(resolve(root, `.sunhat/toolchains/${target}`)).sort(), Object.keys(contents).sort()); + for (const [tool, item] of Object.entries(lock.binaries)) { + const filename = `${tool}${target === 'tron' ? '-tron' : ''}${windows ? '.exe' : ''}`; + assert.equal(item.path, `.sunhat/toolchains/${target}/${filename}`); + assert.deepEqual(readFileSync(resolve(root, item.path)), contents[filename]); + assert.equal(item.sha256, createHash('sha256').update(contents[filename]).digest('hex')); + if (windows) assert.equal(existsSync(resolve(root, `.sunhat/toolchains/${target}/${filename.slice(0, -4)}`)), false); + } + const checked = spawnSync(process.execPath, [cli, 'toolchain', 'check'], { cwd: root, encoding: 'utf8', timeout: 10_000 }); + assert.equal(checked.status, 0, checked.stderr || String(checked.error ?? '')); + assertClean(root, target); + writeFileSync(resolve(root, lock.binaries.forge.path), 'tampered'); + const rejected = spawnSync(process.execPath, [cli, 'toolchain', 'check'], { cwd: root, encoding: 'utf8', timeout: 10_000 }); + assert.equal(rejected.status, 3, rejected.stderr || String(rejected.error ?? '')); + assert.match(rejected.stderr, /forge digest mismatch/u); + }); + + test(`${target} reinstall works across simulated filesystem boundaries`, (t) => { + const fixture = installFixture(t, target); + assertInstalled(install(fixture)); + const previous = snapshot(fixture.root); + writeArchive(fixture, { label: 'replacement' }); + assertInstalled(install(fixture, 'cross-device')); + const installed = snapshot(fixture.root); + assert.notDeepEqual(installed.lock, previous.lock); + for (const [path, bytes] of Object.entries(installed.binaries)) { + assert.notDeepEqual(bytes, previous.binaries[path]); + assert.deepEqual(bytes, fixture.contents[path.split('/').at(-1)]); + } + assert.ok(readFileSync(fixture.renameLog, 'utf8').trim().split('\n').length > 0); + assertPreserved(fixture.root, installed); + assertClean(fixture.root, target); + }); + + test(`${target} incomplete archive leaves the previous installation intact`, (t) => { + const fixture = installFixture(t, target); + assertInstalled(install(fixture)); + const previous = snapshot(fixture.root); + writeArchive(fixture, { label: 'incomplete replacement', missingTool: 'chisel' }); + const rejected = install(fixture); + assert.notEqual(rejected.status, 0); + assert.match(rejected.stderr, /ENOENT/u); + assertPreserved(fixture.root, previous); + assertClean(fixture.root, target); + }); + + for (const fault of ['activate', 'lock']) { + test(`${target} ${fault} failure restores the previous binaries and lock`, (t) => { + const fixture = installFixture(t, target); + assertInstalled(install(fixture)); + const previous = snapshot(fixture.root); + writeArchive(fixture, { label: 'replacement' }); + const rejected = install(fixture, fault); + assert.notEqual(rejected.status, 0); + assert.match(rejected.stderr, new RegExp(`injected ${fault} failure`, 'u')); + assertPreserved(fixture.root, previous); + assertClean(fixture.root, target); + }); + } + + test(`${target} failed rollback retains a recoverable backup`, (t) => { + const fixture = installFixture(t, target); + assertInstalled(install(fixture)); + const previous = snapshot(fixture.root); + writeArchive(fixture, { label: 'replacement' }); + const rejected = install(fixture, 'rollback'); + assert.notEqual(rejected.status, 0); + const toolchains = resolve(fixture.root, '.sunhat/toolchains'); + const stages = readdirSync(toolchains).filter(name => name.startsWith(`.install-${target}-`)); + assert.equal(stages.length, 1); + const backup = resolve(toolchains, stages[0], 'previous'); + assert.ok(rejected.stderr.includes(`previous toolchain preserved at ${backup}`), rejected.stderr); + assert.deepEqual(readFileSync(resolve(fixture.root, '.sunhat/toolchain.json')), previous.lock); + for (const [path, bytes] of Object.entries(previous.binaries)) assert.deepEqual(readFileSync(resolve(backup, path.split('/').at(-1))), bytes); + renameSync(backup, resolve(toolchains, target)); + assertPreserved(fixture.root, previous); + }); + + test(`${target} installs on a different Linux filesystem from OS temp`, { skip: process.platform !== 'linux' }, (t) => { + let fixture; + try { fixture = installFixture(t, target, '/dev/shm'); } + catch (error) { + if (error.code !== 'ENOENT' && error.code !== 'EACCES') throw error; + t.skip('/dev/shm is unavailable'); return; + } + if (statSync(fixture.temporary).dev === statSync(tmpdir()).dev) { t.skip('/dev/shm and OS temp share a filesystem'); return; } + assertInstalled(install(fixture)); + assertPreserved(fixture.root, snapshot(fixture.root)); + assertClean(fixture.root, target); + }); +} diff --git a/tsconfig.json b/tsconfig.json index 1cb1672..2fd1821 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,9 @@ { "compilerOptions": { - "target": "ES2017", - "module": "commonjs", - "lib": ["es2020"], - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "outDir": "./dist", - "strict": true, - "rootDirs": ["./src", "./test"], - "esModuleInterop": true, - "resolveJsonModule": true, - "skipLibCheck": true + "target": "ES2022", "module": "NodeNext", "moduleResolution": "NodeNext", + "rootDir": "src", "outDir": "dist", "strict": true, + "noUncheckedIndexedAccess": true, "exactOptionalPropertyTypes": true, + "declaration": true, "sourceMap": true, "skipLibCheck": true }, - "exclude": ["dist", "node_modules"], - "include": ["./test", "./src", "types.ts"] + "include": ["src/**/*.ts"] } diff --git a/types.ts b/types.ts deleted file mode 100644 index 8d24706..0000000 --- a/types.ts +++ /dev/null @@ -1,403 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import 'hardhat/types/runtime'; -import 'hardhat/types/config'; -import { - LinkReferences, - Artifact, - HardhatRuntimeEnvironment, -} from 'hardhat/types'; -import type { BigNumber } from '@ethersproject/bignumber'; -import { Signer } from '@ethersproject/abstract-signer'; - -export type ExtendedArtifact = { - abi: any[]; - bytecode: string; // "0x"-prefixed hex string - deployedBytecode?: string; // "0x"-prefixed hex string - metadata?: string; - linkReferences?: LinkReferences; - deployedLinkReferences?: LinkReferences; - solcInput?: string; - solcInputHash?: string; - userdoc?: any; - devdoc?: any; - methodIdentifiers?: any; - storageLayout?: any; - evm?: any; -}; - -export interface DeployFunction { - (env: HardhatRuntimeEnvironment): Promise; - skip?: (env: HardhatRuntimeEnvironment) => Promise; - tags?: string[]; - dependencies?: string[]; - runAtTheEnd?: boolean; - id?: string; -} - -export type Address = string; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export type ABI = any[]; // TODO abi - -export type Log = { - blockNumber: number; - blockHash: string; - transactionHash: string; - transactionIndex: number; - logIndex: number; - removed: boolean; - address: string; - topics: string[]; - data: string; -}; - -export type Receipt = { - from: Address; - transactionHash: string; - blockHash: string; - blockNumber: number; - transactionIndex: number; - cumulativeGasUsed: BigNumber | string | number; - gasUsed: BigNumber | string | number; - contractAddress?: string; - to?: Address; - logs?: Log[]; - events?: any[]; - logsBloom?: string; - byzantium?: boolean; - status?: number; - confirmations?: number; -}; - -export type FacetOptions = { - name?: string; - contract?: string | ArtifactData; - args?: any[]; - linkedData?: any; // JSONable ? - libraries?: Libraries; - deterministic?: boolean | string; -}; -export type DiamondFacets = Array | Array; -export interface DiamondOptions extends TxOptions { - diamondContract?: string | ArtifactData; // TODO - diamondContractArgs?: any[]; - owner?: Address; - // defaultLoopeFacet?: boolean; // TODO // always there - defaultOwnershipFacet?: boolean; - defaultCutFacet?: boolean; - facets: DiamondFacets; - log?: boolean; - libraries?: Libraries; - linkedData?: any; // JSONable ? - upgradeIndex?: number; - execute?: { - contract?: - | string - | { name: string; artifact: string | ArtifactData; args?: any[] }; - methodName: string; - args: any[]; - }; - excludeSelectors?: { - [facetName: string]: string[]; - }; - deterministicSalt?: string; - facetsArgs?: any[]; -} - -type ProxyOptionsBase = { - owner?: Address; - upgradeIndex?: number; - proxyContract?: // default to EIP173Proxy - string | ArtifactData; - proxyArgs?: any[]; // default to ["{implementation}", "{admin}", "{data}"] - viaAdminContract?: - | string - | { - name: string; - artifact?: string | ArtifactData; - }; - implementationName?: string; - checkABIConflict?: boolean; - checkProxyAdmin?: boolean; - upgradeFunction?: { - methodName: string; - upgradeArgs: any[]; - }; -}; - -export type ProxyOptions = - | (ProxyOptionsBase & { - methodName?: string; - }) - | (ProxyOptionsBase & { - execute?: - | { - methodName: string; - args: any[]; - } - | { - init: { - methodName: string; - args: any[]; - }; - onUpgrade?: { - methodName: string; - args: any[]; - }; - }; - }); - -export type ArtifactData = { - abi: ABI; - bytecode: string; - deployedBytecode?: string; - metadata?: string; - methodIdentifiers?: any; - storageLayout?: any; - userdoc?: any; - devdoc?: any; - gasEstimates?: any; -}; - -export interface DeployOptionsBase extends TxOptions { - contract?: string | ArtifactData; - args?: any[]; - skipIfAlreadyDeployed?: boolean; - linkedData?: any; // JSONable ? - libraries?: Libraries; - proxy?: boolean | string | ProxyOptions; // TODO support different type of proxies ? -} - -export interface DeployOptions extends DeployOptionsBase { - deterministicDeployment?: boolean | string; -} - -export interface Create2DeployOptions extends DeployOptionsBase { - salt?: string; -} - -export interface CallOptions { - from?: string; - gasLimit?: string | number | BigNumber; - gasPrice?: string | BigNumber; - maxFeePerGas?: string | BigNumber; - maxPriorityFeePerGas?: string | BigNumber; - value?: string | BigNumber; - nonce?: string | number | BigNumber; - to?: string; // TODO make to and data part of a `SimpleCallOptions` interface - data?: string; -} - -export interface TxOptions extends CallOptions { - from: string; - log?: boolean; // TODO string (for comment in log) - autoMine?: boolean; - estimatedGasLimit?: string | number | BigNumber; - estimateGasExtra?: string | number | BigNumber; - waitConfirmations?: number; -} - -export interface Execute extends TxOptions { - name: string; - methodName: string; - args?: any[]; -} - -export interface SimpleTx extends TxOptions { - to: string; -} - -export interface DeployedContract { - address: Address; - abi: ABI; -} - -export interface DeployResult extends Deployment { - newlyDeployed: boolean; -} - -export type FixtureFunc = ( - env: HardhatRuntimeEnvironment, - options?: O -) => Promise; - -export interface DeploymentsExtension { - deploy(name: string, options: DeployOptions): Promise; // deploy a contract - diamond: { - // deploy diamond based contract (see section below) - deploy(name: string, options: DiamondOptions): Promise; - }; - deterministic( // return the determinsitic address as well as a function to deploy the contract, can pass the `salt` field in the option to use different salt - name: string, - options: Create2DeployOptions - ): Promise<{ - address: Address; - implementationAddress?: Address; - deploy(): Promise; - }>; - fetchIfDifferent( // return true if new compiled code is different than deployed contract - name: string, - options: DeployOptions - ): Promise<{ differences: boolean; address?: string }>; - - readDotFile(name: string): Promise; - saveDotFile(name: string, content: string): Promise; - deleteDotFile(name: string): Promise; - - save(name: string, deployment: DeploymentSubmission): Promise; // low level save of deployment - delete(name: string): Promise; - get(name: string): Promise; // fetch a deployment by name, throw if not existing - getOrNull(name: string): Promise; // fetch deployment by name, return null if not existing - getDeploymentsFromAddress(address: string): Promise; - all(): Promise<{ [name: string]: Deployment }>; // return all deployments - getArtifact(name: string): Promise; // return a hardhat artifact (compiled contract without deployment) - getExtendedArtifact(name: string): Promise; // return a extended artifact (with more info) (compiled contract without deployment) - run( // execute deployment scripts - tags?: string | string[], - options?: { - resetMemory?: boolean; - deletePreviousDeployments?: boolean; - writeDeploymentsToFiles?: boolean; - export?: string; - exportAll?: string; - } - ): Promise<{ [name: string]: Deployment }>; - fixture( // execute deployment as fixture for test // use evm_snapshot to revert back - tags?: string | string[], - options?: { fallbackToGlobal?: boolean; keepExistingDeployments?: boolean } - ): Promise<{ [name: string]: Deployment }>; - createFixture( // execute a function as fixture using evm_snaphost to revert back each time - func: FixtureFunc, - id?: string - ): (options?: O) => Promise; - log(...args: any[]): void; // log data only if log enabled (disabled in test fixture) - - getNetworkName(): string; - getGasUsed(): number; - - execute( // execute function call on contract - name: string, - options: TxOptions, - methodName: string, - ...args: any[] - ): Promise; - rawTx(tx: SimpleTx): Promise; // execute a simple transaction - catchUnknownSigner( // you can wrap other function with this function and it will catch failure due to missing signer with the details of the tx to be executed - action: Promise | (() => Promise), - options?: { log?: boolean } - ): Promise; - read( // make a read-only call to a contract - name: string, - options: CallOptions, - methodName: string, - ...args: any[] - ): Promise; - read(name: string, methodName: string, ...args: any[]): Promise; - getSigner(address: string): Promise; - // rawCall(to: Address, data: string): Promise; // TODO ? -} - -export interface ContractExport { - address: string; - abi: any[]; - linkedData?: any; -} - -export interface Export { - chainId: string; - name: string; - contracts: { [name: string]: ContractExport }; -} - -export type MultiExport = { - [chainId: string]: Export[]; -}; - -export type Libraries = { [libraryName: string]: Address }; - -export enum FacetCutAction { - Add, - Replace, - Remove, -} - -export type FacetCut = Facet & { - action: FacetCutAction; -}; - -export type Facet = { - facetAddress: string; - functionSelectors: string[]; -}; - -export interface DeploymentSubmission { - abi: ABI; - address: Address; // used to override receipt.contractAddress (useful for proxies) - addressHex?: any; // used to override receipt.contractAddressHex (useful for proxies) - receipt?: Receipt; - transactionHash?: string; - history?: Deployment[]; - implementation?: string; - args?: any[]; - linkedData?: any; - solcInput?: string; - solcInputHash?: string; - metadata?: string; - bytecode?: string; - deployedBytecode?: string; - userdoc?: any; - devdoc?: any; - methodIdentifiers?: any; - facets?: Facet[]; - execute?: { - methodName: string; - args: any[]; - }; - storageLayout?: any; - libraries?: Libraries; - gasEstimates?: any; - factoryDeps?: string[]; - bandwith?: number; -} - -// export type LibraryReferences = { -// [filepath: string]: { [name: string]: { length: number; start: number }[] }; -// }; - -export interface Deployment { - address: Address; - addressHex?: any; // used to override receipt.contractAddressHex (useful for proxies) - abi: ABI; - receipt?: Receipt; - transactionHash?: string; - history?: Deployment[]; - numDeployments?: number; - implementation?: string; - args?: any[]; - linkedData?: any; - solcInputHash?: string; - metadata?: string; - bytecode?: string; - deployedBytecode?: string; - libraries?: Libraries; - userdoc?: any; - devdoc?: any; - methodIdentifiers?: any; - facets?: Facet[]; - storageLayout?: any; - gasEstimates?: any; - factoryDeps?: string[]; - bandwith?: number; -} - -export interface DeterministicDeploymentInfo { - factory: string; - deployer: string; - funding: string; - signedTx: string; -} diff --git a/vscode-extension/.vscodeignore b/vscode-extension/.vscodeignore deleted file mode 100644 index 324e6f0..0000000 --- a/vscode-extension/.vscodeignore +++ /dev/null @@ -1,24 +0,0 @@ -.vscode/** -.vscode-test/** - -node_modules/** - -src/** - -out/test/** - -.eslintrc.js -eslint.config.js -.prettierrc -.prettierignore - -**/*.map - -tsconfig.json - -.git/** -.gitignore - -pnpm-lock.yaml - -.env diff --git a/vscode-extension/LICENSE b/vscode-extension/LICENSE deleted file mode 100644 index 7520573..0000000 --- a/vscode-extension/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Ronan Sandford - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vscode-extension/README.md b/vscode-extension/README.md deleted file mode 100644 index e3c923c..0000000 --- a/vscode-extension/README.md +++ /dev/null @@ -1,126 +0,0 @@ -# Sunhat VSCode Extension - -

- -

- -

- - VS Marketplace Version - - - Installs - - - Rating - -

- -The essential VS Code extension pack for Web3 developers using Sunhat. Streamline your smart contract development, testing, and deployment lifecycle with this all-in-one toolkit. - -## ✨ Core Features - -* 🤖 **AI-Powered Code Audits**: Get instant security and optimization feedback directly in your editor. Powered by Large Language Models (LLMs), Sunhat identifies potential issues in your **Solidity** and **Vyper** code, displaying them as in-line diagnostics. -* **Integrated Test Runner**: Visualize, run, and debug your Sunhat tests directly within the VS Code Test Explorer. -* **Full Language Support**: Comprehensive syntax highlighting, code completion, and error checking for both Solidity and Vyper. -* **Accelerated Development**: Write code faster with intelligent snippets for common Solidity patterns and Sunhat tests. -* **All-in-One Setup**: Get the most critical extensions for Sunhat development with a single install. - ---- - -## 🚀 Features & Setup - -This toolkit offers two powerful, integrated features: **AI-Powered Auditing** and the **Test Explorer**. - -### 🤖 1. AI-Powered Auditing - -Bring the power of AI to your workflow. Audit your contracts and see the results without ever leaving VS Code. - - - - -**How it works:** -1. You run a Hardhat task (`npx hardhat audit`). -2. The task sends your code to a configured LLM (e.g., GPT-4, Gemini). -3. The AI's analysis is saved to an `audit-report.json` file. -4. The Sunhat extension automatically reads this file and displays the findings as diagnostics (wavy underlines) in your code. - -**Setup Guide:** - -**Step 1: Configure Hardhat** - -In your `hardhat.config.ts`, add an `llm` configuration block. You'll also need to set your API keys in a `.env` file. - -```typescript -// hardhat.config.ts -import 'dotenv/config'; // Make sure to import this - -// ... your existing config - -const config: HardhatUserConfig = { - // ... solidity, paths, etc. - llm: { - defaultProvider: 'openai', // or 'gemini', 'qwen', etc. - providers: { - openai: { - apiKey: process.env.OPENAI_API_KEY || '', - model: 'gpt-4-turbo-preview', - }, - // You can add other providers here - }, - }, -}; - -export default config; -``` - -**Step 2: Run the Audit** - -Execute the audit task from your terminal. The `--format json` flag is **required** for the VS Code integration to work. - -```bash -# This will audit all .sol and .vy contracts in your project -npx hardhat audit --format json -``` - -**Step 3: View Results in VS Code** - -That's it! The Sunhat extension will automatically detect the generated `audit-report.json` and display the issues. Hover over any underlined code to see detailed descriptions and AI-generated suggestions. - -### 🧪 2. Test Explorer - -**Step 1: Configure `settings.json`** - -In your project's `.vscode/settings.json` file, add the following to connect the Test Explorer to Hardhat: - -```jsonc -// .vscode/settings.json -{ - "mochaExplorer.files": "test/**/*.ts", - "mochaExplorer.require": "hardhat/register" -} -``` - -**Step 2: Reload and Explore** - -Reload your VS Code window (`Cmd+Shift+P` -> `Developer: Reload Window`). The Test icon will appear in your activity bar, ready for you to run and debug tests. - ---- - -## 📦 Extensions Included - -This toolkit bundles the following industry-standard extensions to power its features: - -| Extension | Publisher | Description | -| -------------------------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------ | -| [Solidity](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) | Nomic Foundation | Provides language support for Solidity, essential for the audit feature. | -| [Vyper](https://marketplace.visualstudio.com/items?itemName=tintinweb.vscode-vyper) | tintinweb | Provides language support for Vyper, essential for the audit feature. | -| [Test Explorer for Mocha](https://marketplace.visualstudio.com/items?itemName=hbenl.vscode-mocha-test-adapter) | hbenl | Integrates Mocha tests into the VS Code side panel. | -| [Solidity Snippets](https://marketplace.visualstudio.com/items?itemName=maratib.solidity-snippets) | maratib | A handy collection of code snippets for common Solidity patterns. | -| [Hardhat Test Snippets](https://marketplace.visualstudio.com/items?itemName=maratib.hardhat-test-snippets) | maratib | Speeds up test writing with snippets for Chai matchers and Hardhat tasks. | - - ---- - -Happy Hacking! - diff --git a/vscode-extension/images/logo.png b/vscode-extension/images/logo.png deleted file mode 100644 index f51fdc0e6115bbd8b9df7f23c415aa17a996ad6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104937 zcmeEtQ+p*1uyryMTNB%v*qGS%BoiAuwlT47+qRR5ZCg9Go&DwgF3yiQ&$;OCr~9g_ zyJ}Ufs#Rf%@)C$}xNu-#V2DzZqRL=k-~Rr0z(9RHL6{sR`?|o|NoqKPfx)BycYuSX zXJUUn1b0-H5C*HB!aw=CfiM%269NOPi-CVPfCK|i^N|u2Qgs7A|IlhE)^H#U=4e2oty;DAu-BIMnGWNOIU8=2c){%dUHYi$NvV7?NfLbX^z5Wer93+tVHi zUOH#JCk{9lVOJ-%`P`hpeX*Ff)idu=QqDX^8Bl#}?4@5c@IU!RRj1y{c}ch5lEnU$ zn<=~HomC%^7bQAc{8A;7UhKbhO*2zel?D{H6Sj{I7Q;)*Os}=RcJ24N#+b##faH68 zzt`;kTEE&JTD}RQ42v2Xj-vegb@l^E3xvSG-w%T4{L6$U*=yZIOD#$oA0f6*dN7Kya5=GS(sU zR2ewfRgtIQge6Rh(EJ*8t|cExJH9aHIYZm9qKebnN^MlCEA&|H8=2t?y`v%9<3Ycw z=qVJV)aGd^QQ}PY)!zt!-2N{1hC({X^IHZ3sWl&nG<9=t zi?7h*!uv-1yby=cd{jHzikc3_fxFxbczuN3;zjG?jP5!vi6J;CSpienHS0@=VgSP+ z1=qk{JvCv8XNhb+AC~2ak~OW#h!Y$J+%QW8JZ z7$=Xs%?Q8652KSLtm=A?EF54bEtfY;RgJQfWuuk)2{>&2_rNq}3lvJcZM*L_VZks? z7-MgOkH(~Hi`TVe?8_ElqA_+D%9c;$l{pr)?gLr?)>r%K?!Lzn#oP+fFY|rA4Szmu z6B2cH2ZI{C5Wn0oZ3g1YqMtq@R|I^>wuHYX@g(5yp^P8xV)K?nnYduki)B$Lzqb*i z!s$G%|F9qF^yB(X;$3kKAGl1b!jso}*g3Hg$*00|(nUGx<%=~ET_6otOWH6Uj}%ft z&SPV`XEmR$Y9swBNg*$i&2nN=kB}DD{&TX_6m7WBS=~KbQ+?;Q{-Bc~H#@~1p>q5w z(<_~nv+10$CCFUDO!APz`Y6!WN>uSiH=$R2-@^Rcin(^MH~n_TS6~oc?(Ezjosg)iIld52_+YEgZ^CEvt@@J@fv zHD4e`H~aOG|LpcGaYhFpRPE2={c}@sO;w>(={HX+fgWWY5?3|n`$HK?X#4{@jaW9g zHa-$Y0|HA~Up#v`z^{|<+6B%1gCl#7;Ep9n3a5OFJ*J5+Eq5)y!(3KjQh_uSzj;A{O_g}< zZfuEnegz_kVpGMP3<8lQe-S5W%&&FJX-RyC$I;Lk*s}IuNaBvmtuqfW3*TMx?`+x89=x%fN!L z(|t;mP~}5C%axa39@Q6zh@d1CRC9~{RZqa`7u4-?-ha*t@^TS+L&-7}qVRU~+6V9s z!sFX@J2}VKwfhEKql0UaxvNvl$R>}3n-LT@uC6xl3T4rjaJy$DtcfskqxDj`m4xZ<|NcV%p^B)2;j0yRLV}n} z4OnTJBy_ag9wmKUSMD8A8eI?&q%jePR65^lJ3XL0wgj7Y=q{TBRW zhJVu*aufaa)7J_r<=geb$mMTqxO7pOe@Wa<<;4ro7Bogp|IA+QaW65PG_^t(aTdOD zaM#lob~@r{YpFt;x%30J%e#0l6?Z?Jndn=GIqhG#YWL7C#i(^*y7CgaWW9!?c0B|L z(dcFBDc=xeF2NA4k*&Bn+ZTa1&AOe~rJr{F6NvbT+A@BIV7oIJm`uZ;YyN2>ZNUv0 zybD>M!Ud+?{)tGw-ETY%+aIbnx7ts$L@1i?aM1k$w4}@|`N8TPS~f`Yg29FkNjgMr zawJ=L?euL@Ut6VvvN){ttZt1?{a_o&7N65C~ zLJ}Ag1DCS3?L9HB=Eeuhr#?j~tB%qMr<;wQ5P`YS_J2Jh;7YF2*xSzrz%1Qo8T8WYxjIOcOW_@<$&Y!yVYO9vr5g))#hMNLf4GA(xmN69!hWiX`x zI(+c2;H@lXnm&$Q8dBnZF&(8Kpk!HsiVaKqy>@C6BWbBExeRCU05Dcu)W|U4Rv3L# z9V*aiKVO4-dOx#!IXE%5NK_^4NR?K`+A;u}*Bqj$%(i8u>1jfgw2*YZ5)%USIFR~7 zzsq`l$E!j6&k%o*wm{5s^n6!(cTWc%8HX@65OEZy4wd1$ z_90V?=cSB*E##uyhoNM&0-}wM1Rqv1>&EpA`aiCmA)rgKu-CgrNm()nA86Z0H)d<- zQE=}jSs_ufBT?!K&Tk9l{5xsOZ$6X@m$3FT;TL&~w_83LJQG|Zl$Cuj(51)DX%9rH zhqhv#9kX^wkXf&#`!}GTWp(;ui&BszkZ(lsF>7oN zJMiNbbP~1u_Us9)$(?lzv-cCufN)^ICwdsN@+ex@L(KlXrSOn_A5fpaN~VB)!L#G4C9KvYCWa0de2W=hq0n31_r>~L>jw>ZBPGD6kN%=$m zK(pF?D9UN2t(M`mH?qr0C{ZTFc^9bQz-Y(~JWmlSQp9j2D->}YXh;GawYDl$%QhnQ%2T?4_Y%G+3}taTw1U+nv|41oo?ayNZ}*?R z$O_j@5g=uv|Li9*XVX=C$9lcASM+^5_qIotrhBc)juL{Syn@^$638HMR2VSyUIn&= zpQ!20A1u=YNR^eBlJb6%8;mp_LyNgd#um?TZSM-@HSR-&s_)fLh95on#rF_&F7$*t z9Okzn_{sE1tk{86ao%1$&b1bF+I83ZSvm_Zv=U*qS%}QScQP;I@vJPg%KQaQ>MdM- zBKIgN48+0aMem#*JjV0Q*F6*0hy-QRZn=sWg>+v$G~cMr)_`sPMQqhGAR;1@`?Y^V zGO$7gH}$*sle$(~9i8?(CPpO2ilLlEG|L8?r%r^jOGUwG@EMM(@j|0MrjyA1_W zY^B{|^(l8W0Y2h48deJVI%oDLzY&Rme7$%~`3zPZI>K
    CROg3 z_be~4h}1zn|3u!qZjo@KQXu@lf~eQG+Llo3J|#Npl?py@k5g;2G~YuNO(uMw&07o6 zO%|SI7FGm?g*+KagPAgN^j}hAU241xl-%^OUbXv{C86J`HIHSbiU*hil{{v9?ItkH z-q6|44O}DwySLrScCLV$5h z?Zdodjw}f49qyCyR_yC{fPaCp%-@LZ8E9xe{=9LDGj|m6dwf()5*&Lt1z=>e$#ui)P)i6~lLhSU84WXi#X`@QeZ*)yt7aZ5O0!x;uQsw0~0 zxzpd`Z1Eri6J5JZ}Yf4MVNGQv>HA>Fa7dN9xg~3Rb^z%Ky-n^QvV9! zn$46%ZHkOYi&>6*SAU#R zsA5B8nS<~JFmYKm@28S1gWGr)%_lukLe|Cklp zj;W||aLmVe>K3KPi6Bo+J4Te#o6^=YF~{^lL<0T1F54E=sy>~Mj*nUhwCtI zt|{3YrLA~_W`w8*CqVglkw-MQz}SX4w%K|PgU%5R>#o0WB3==(?ozQ{<-7fNdRFYH_;JILe!eQhTa0-M6`i)4alKS=CMihWh2DudLlWw%}1aVW(loLkF)U zE=XxQ`W@c{r;z)oH%Ago)AcBd!Z#qrnZmo+g`y3yHJ*1-jyvQ@p*q4GFSAhj&oeV_)UV)2Fpf(~s24|v!Q!Btchuzs6XhqxKxpBRI@NlnBtRsS zi^2$X7|z}%6BjC5Oh6cmzxY}5&J9zf>e4u`j^~uq3UiT@|M|IvIRDDqfo`cN5?y2v zXF+N0WbzTG;No2{&;ZB85dV9dtn56XMrb@txh)-f0u3{dC-QaucfO}GpOI>_u6R&l z2dBE%TiVB;5l1u4B@TNq&jbG^rZgiogV%Ao*|BmoqY7U#+XeovG)g2478lzJ&1A(5 z?=227M^A?z6fN|MF^=6~bK=sG<{`8Ek6v!Jh~C7zK{DPNv7CEL=EIDYpzlxD!`D8Z z-|$>fzhJO>m+iun+}Fe^y9*$wiBcF*tDqGUR8pw4e7${r$ zcCIuJxd?16%c?v**m$_F6?9q{lbQnR_)qQsym;5{0ZST}Y;D%in;vdY+;{XeM_YV& zpI`*ka^j>UDs?}0zJf;4pMB4*9w)|`a3sjAHF?dY z38B!+D#(Obo~0o5*46e+45==YU~R`PZ;UkJvd8V<@-v_<3<(y0spcAGEsNH}Z3H9+ z)|WKqqi0=kP=0}cfmBS>1b1i~K~#a*c1)7@w{r>!>+N{bDT-1eNS#TdD? zelJb01rjgqQXp^WR`d8w-@a?jfCM5Gi1_@Xh6see$k}GEZ)J|ar?(^EgtK_3-;`kTAe3;E zRcT=P+;?5{;t|mi#8$g7MQQ~JYFQ{e73M4qHbfhHa#WZqO`0O97xkY;Iz{r%oF@a> zl2IpnI=vBXs@i52c!X5Tey!*6^+1+|($J6c1r9?}fUoEP#<5E=iIRytV?utM?JrvL zKNQNbno4v5XC^idN>Ex|%Fn3Vu=o=JrMgW6X;1k|a;rC|Gg@n)80#a2J%L3DbGA#E zuNh;OMG`NMa{v?*tFQD4}@g_?2m>ulhSDrD@^qefrPUDFcWlm5BJBm-3g2 zLdou+xMaM~hs5L00?C>JB%L!38gX+|1$m$u-{9C&RBl!V8pIyD<69k`ot)plFH~zt zM@y25`O#|gm|CaQ7|EiNvVT9=kGa??XXg{NQpdDSK3AN^B=Qs1{t?0lm8=Vb?H~aN zX-z|4a*P0^Od61~I5I17t?*&<&N{0;rjO|Ue(G311DK0BwUQ1<;S?n-T3EdIlz9V* zyl=lnkVLH`3l-R}+iU87l(8edQ0 zyg`C{uJN#q0;uhWXHpP}iD~!Q5YTEVoi#gu9xZb)GgFIejx!(nXGzkcH_E^ghxPsF zlk*Uum?*r993MILVLY;}!PQ9k7lg26X4_zPud&o|`1t3*ol4(3_Us46q@zg}xvuB= zy(tgo!JsJKL$5*Bstge>*GAPP2-*uAH2vvfx9?I=@)xg#D5tMunB;*~e>|^_Ff0n? zS5WOWN9u2E@{wY-!IDO{s$~|D+G$gQDeNCnJyyhC+e{Q6x4MR>Kxw}3#>=GEy_rL) zQxooy{wT1&ioCY>9Wh7#QsfH*3IV+{LUXFeJ_+*QPBhf7!jhbDnb|7LlOQ&-xYFDvfMYEpUdu_Xbmhynu?3DQceT#XW+!?a|uibGm zW8%*<4ie*}-sxsB}_wn-w|aJaW(Is3Mzn&{=mVMd}pgnY3ZW6AWKN zBZ&n)VB(;t!cW_w!j#mfqsm#BM~i?gaJ{Q7eO!r7;%z@a&`!qj$YXjajewJ|(WIWN zlW2JEtVZYV`~#R2>1UK9^ouQcpRqX3lA^+G;zqc$BjVXxgeJCPbkrv^bi9B z;jz2(ofG*@@)S9mtG&lI7BINr&NsQjfvCXQVB#le#6D9XQuek8 z-S;3|AOpzJ$4K@6n+=Kb&3*)~F=lb;q9R`Jf zu?yv_XvmG$M4EBli-Ds=#q=eAbbQ(EnWC~eo+`LR8ZBKBF-|9 zM<}xZT$Qr0qMPJTxA<@i#7OQH5z_2MiF3(#{V=W(l7&GoY?fFrpl+F6; zdz$$qF-}IJ5{sQ%(K1(Uj~)n_Wrj3U-6kE)qY_o0&&>_79_Gcw_4H9TVbS?sq0<24 z3-7tP^4B^B`{9@YCzcPoi;g7_@^jL@>NVD^`G)XUakw5@b9{D7^S)#s*)^PEttln5 z&Q50cT6VU0?_lU~*-h#;USyy82j(U==zP;9Z8{Jw_r36HhT$I4eY@D%D|^Q9r|QwZ zPVh4i)s(C*Cxc#`a4F&48Yu1aGo&5qFV z7k1R3hC-xzVwtm$VAbv1p}M^UvwOv-1p}LyvTnGOsxu@;PpChBZ$n(uVFf@k0k=w` zz)M{a2%R@LaKhZcz4B4LEY=C;Tbyw*SKj*Xb3r`b3tH zHMa5x&c55{5Gz1*_HI_ytRS1)S4|!5gqxe@DL#*qKt-1~dgh+6#PZehXHO+}C!c1U zTB#1hlb5x*rde?>T_?V&Fa)~U3;LYV2Csyj?1^mVkoRu2ODarT%JhPSBk8+-frt>J z(d9Uqe^Y`Awzt$P2*9^<_Mcf_)X#=UUZuysCAY37Jt2jd+Gk3aO{;oa)_T-n)lIC>OQ6e|>;68I>uD}Oz)UqEMBldG@aH;*OXP2`dH7XeO@}|p~Nr2Snvw1BHl%>Kc8it zkL>0pO}Zi1Oy7()4Vj1!T=ajU^)94CS~|!|qAup}GfEJ0qzsu?|273_E*OGy_~EfqgFO?FYenVh&#sId1Mo}`sjBU}1-AK1NZX*JVj zkZEZa5I+i$WI|eKJn#~A@~&3u<`GI+Kh7R7^~R)@UnvO~il7$dNALP37ZHP&9~E;a zgYi&=>#T4l>M;EMDe5sI<<4Y) zO2r5dQ&y%E^?2v-;M=?YtZS%vLk#B9cTy0YAc3GHg3lz+U z@!BKU9M^e7Ld7@j1I;tE)mEQQ93)osF^dq2Z>I(V_9Ke2#v*+G#kh7M* z31d2=n^;>u&f)T(4WmI2(b$UjnYJ)9;=+UiIQY zsvm|&g>zd}cm$X$8o*+T%o}|;{}H2smLVk_tBf=NOIxz%?)ni%?O_+siqBl#p|FqG z)?IxAe3?71+vEGe*VT)mqc$Tl7XX7PSC&pHODsx(ih9ta39~Y@_$|XVHg1a7)=A#r z^vNe`@FqKQ*Pv>KS|omYKF@GD(l~~i($msWEAyCByI2-Gjk<2?cJ9%)_b6KTU&|N% zqy2v)JA(c_Yhcv?3?J|Gd&V8WM1K?3+`cmNV6H;hvgwvy#NaBEzHXpcK`A z)+4nZ_1yym=lxKzrec0`w}`nLxrv>o>1keV zO4)2B+t039X3@bIWunCj#4~F(8|s;aGsQFn|5p`UlGS?wm7LAaHTl3QnI7p;`Tz(t z7MLXti*F#89T1f+qlft!yL<{5jrmq*gSyb%=3Q}B1O1rmXQCt@ytQQ`;a)e)IwGHp z8mNe}&8em=A)TGyzV~Eu2?`JS5SH9;&V|+AciCyQ?B4riV&I)T`QCg;Blbjhok;Ze zb(BFMF1;8B@nA+$+&-3)O3em4DigtblU6Xy8tU}#>s~LW_jDnirq8${8f>_m{P>Ew z3FrFtPgD^@7GmS~5ZdrA*Y}~K*TfuoT}pLj6sUT->ZAI5&Il=f&$f7NmMQ5o_^zoc zzR;vp*=FA8Dz8W;c*>e$9c9v=fb=+^1q!acG=}p(z?%39ixd0)6;S6SXE|nIeLjA@ z+CiHZomMZBtusrSjnp8YMt3NFEhr8|;$I4~gURZy{}HTTG`9llCAi_;BsxmVtqTwtMMis=-qhtYZ9 zQV1wi$)r8(H`5E<7r*WXmwU0U*#oLoeq}n7?#bNfUVi%iGrNIwj}+gB%;)>^1ap4? z_rySqP^sVye(=`L;Kq_UN=AWUqkV9~DW#I%4;DV59TuVWg3CCvoX1)(|NH0yh;r6q z7Yw4_46wfV`@Y2VPgmiN;lFeWRSJ44g1})eijl!E!BGbaNhx)d_I~2T*v~8Z`s)!TX*s_jdgWtNqO)aU`tti)gD{3hDQ6a$ZJm`fs3kP zsYMyRg)tol?3Sfmj#dRHNO(rQ9;DZZReNLjH9^1GtL=HdnQ@cpqBp=#c}j|c#aT0m zG|COyZg5-Vioxr5`%OlU%2=e}fi$0Ml{=jOI@2_wMj^y(GNKDpW-LSAl}kdbQk|aY zK*kY2(*~hpx?!9k1Uwl_bfpGxF@jsA{ymd!sl`DK3t5F%5#WhFI3YCPglDkGtF!QkMnlaba`c+Ib`hGBk7_Mr zU7VQp1fOP(D*htbK5gqTTw`n2-#+5MkX+BKOj~33)xX34PLx0ECiJCiaEo(0CJZ<9 zvfdz4lU!NJW`go4f)U2+r8F|w20GDNE;mR>RRk&Vly3Z+W8)Sl9np$K43;PDZ!oGa zA0|06iZC?(J5o@%jjG(V!bm@a4_{DjENa44?=KjfECdv8Xp?>a_yNlje`=a3bDNL9 z#}$_xM^6SXo2lHryOpAvr+LN~rgLa)>l%`nQ}|XccdSiVW|IknpZRRuC*;gDiqv=T znsX*lY8(_AiMRz!AguO7s9mG@R6945$b%zRy&DAYlh+ai=%oJ2ah=#+ zV%uCue{F9Q>iEoaK4A={p&F!2`uD!Gjjq|;u>F{j5F`v=9l-3*=r`VDons?lFO55b zmK7%N^yHv0gD{U*SS9r?FCmu;NheI!Gv%UOkE{~KVUdcoR_eR^Lz8^fR+1SVhzc2B zw~&ZDIjlT3?`R`B{FsBz&^NQLS04K9)*G^oKB^#5eU32>(A`4+n(~!DlvHZKr=a^! zb#K{`fAKbNr8by%y;!D6??YtT~IA*SO)i`w1RTZdG;ee$PsSu_)7mMb5ko4^bAjjk?U2+b zFR@jB5I#?X)m}D?ZF;Pg@HUD5MBs<-Q3?L##UP%Xr|q-#lpV zcdPaD4a6-g{_#z{S%~M1puMD%F)<)yVehY~vqVA-3r)BasM5i6-*pCz!qe*Sa@Qog zVx&Tkj7RR3oX+w_(d1DPD5p7Y5~DVe-zBy~Fh_Efp8-@7T}EFR1Id%h9Poq|U~kz< zeD^iz_(*liX%Le$5@p*vc|JhkxKT%uUplm-h??WBeXwVJk5@GoVK$xy=)oa-pWLmf zpn!Q|Lh%JC00%W%GGiYNrnnOf=51;%>YS`qAzDxn7BwpSbOhR}0lJ^lX7?+Toa30R z;+`%ykp!&-43;(aYn~;`2DgaKmb1Lp$XlQL_<$H3ebjSPQ(>dJJGle;Xdo4P5wVH) zb|?y)Vu2z#jFPk}Qyg*=jpU+i?NHsqgsgQgFaCnET?|paHw&!si-i#R2vf^NpZ(f~s0TkMG{ z*89Qb7inPHqaA4q8z$XrSNi22zqKiH$E61yxkYAWC=<$I{bu|{NrM@E#%oPC(as7h zg6-ggt~vk825hoO@6y)Fw6^V)?0>Wzw``}*PHK^=>(uD|;|YOUlE|QhACY4GS2FnZ z2w2IFUWGy&#}`(=F&G=N5|7DH6BGics#_1UKR|z$z2vI=t`qDm2kuvQ9$wVMk zVH+YqsB86eOq6QA3(ZaZweu0@9kXKwoVu?m^PDh*cV^Q|4x#wDw<{J@8YhZLCojcP zAjAD5O!^{+y>UXq!vcn}7;63qDKw+uC-Wv-*|HMd97&j2lE9YWU6$Q<=D0u<4Pg?9 zOlT=WI=zTgZQb9Ggwywq7Z#g|*JFV>BeK#dZ#I&_3Efh5D80nBo1p0@-(Ict0EaKX z{ZHTFbxm}VG2DB>f19fVJ)3opzX2Aefz&&PkBkRPR0{dIK+oQ(>WDfJjF`B2XUV@J z6W_sRNU1()M?mchIY@T6g@^Ge%rVlXLqoU`JHWw`9@Oeuni#J9(iTG@86g-?XfWUh z;9FF^WVOJduHcTtiMr*J7;!otCy#!JqfY2bojRsENI`@BFkf@GQ+jNM!!p0cC1g=z z?o)JDEbs{t#T6O`$Z0A^8{+}+UaO?`hy$G%VY2Hy-f!JMhKyquMgywu92ntn8duJu7VwuNx^TmyZ4agEwJ|RB zlWFIeZS#Wj8mF5tJa?78@&Be$+|qYFPP*T^tP3ew`SY_xhb@yMugeQd6qEkJZ z$7P?xz|Y}-gsq!pyF_;eszUlUto|suy9E84|B~t`>#xti|#hyWD3T@g&g+}>oBT*%7)SOku zQvDqvp*j41hs@%eB=iMrG4b^>JG4|(tgesX{z|D*|u z7sZR44XUJ1X_kDjfsl}1mo`xgb9e&TSEt;Ai1tZvqZIz56bSFm6h_qz$8q^=%LTv3I z0TqxybcWu*HdW8pi=zvBg5l-RW$%DHk@@PAksg$(-_Col^%=g8xrM7od{6z5*)Qo4 zqo!QHYK?@E9exPw!G*s=IOaYplM=w{_<%)LEG%odMWZ0b5GcD)Q8LYCJMTgVOlQ+E^kpcSQ^4!@$_+ zi06gsSP(_R#3g8Y26ThVAHg_c#D<&mAJcmVUPHvl3w*BNSyuJ+=dMc1Xk$UV)Xm!K zJ~dPAM0DsBj|S*rDdZTh;4;Am&;rYieX9#ag_ErBT+2 z`gX^$Hy^?fbH{T}&<-h+uSSP?$)rMe*GiO{jhX z@@M3HvGkhzB1g~0*F>iu`}(i*CH;F@%+RwC*%lMbwRp&IM=cY%Dg(ywPFeDXg8S;B z_pvxK5xvd`r~TOJL6J0yVX5t7(0yF?xW+L4Gl9$F%ctD1WxB}pFHv5FOsYI!??t%tv-}HKD<; zFCdBl1#gxV$~*iQ9tH;t+sAj7bU^0Ps^W`Y6uUORVFq{}y}+1iQTvuD3Z%>%4D=oK;WqpH`0CmoJ4pF?f=M>!>Zs%suQ3nI&I-yab9-=|R2$ zSzqbxC;T_~8;teZPMP??$98w$xiDGYPu|x(hJTu4Aq9Sm%iW2MhSS<#l z?U8wMgqvRbTLs#L^B__UhF08gr5uPaj0fG-}qFAtwI;k)CB&9wd%7Y5`^8PD8f0Z}uhV-8UyV-l(h!kIG3}xFH>1$X1 z3h({X|M#aSg<&pM3kq&9_8&K5!Uov3-cwm-?_4*b?~l#|Mjeyfy8C8jK{ zQ?I@smWuz{Z-L_7R7$yQ`$;I7Y?S0zde((db)hITd+eK;bxeEty{LA!XQHA^n41bY zixMqu_Jc_M3^d&H<;QOF|C#*9{$~Fof=B=WrB@-8`@pG;h#RY5eT@-A#eZnQ>+a}Q zAJB1wFYXU*r%)oRQB>mQhxz?SAlMX3aSaQKpVBSwO32};*iKL1S@6mv_#TQ)U_%|) zmnNLM56U{Wsj}pNc}_~pFE<#S^IhJVi*eDBV^QYV(wJp0-5u$B+LGt2nc_;n;o~;P zP%wJJ?Bf@;%g4C@m*S);v}M^Xyd#{tUjlOLgo+o3EkQxlN$8{Ws4}Q+7o)oy3q7zc zE&`&8e-{UF!t-UR~`Jk}j5@E@2 z^$_g`%pc`uR$>E2=&kc%j3wQ`J8)_nyZi$`w)La`N|~;xa;MafQ;Zw@MAk_xwt4UW zZcNuKgAUsv+X5+s>*$ath8?K`GPvinNQ}yigZnv@o)elPH3}2&7H~iy?O~s;1anOf zP&_l=s4%HXNkmWb{^=O4etQ~miw;QZ_tarvvi>c6LT?eBa?@7*XHed3Qpd{Vk<$w;Gk zDNkM@I4P2lmpZI3#R(c_={~Ieski4IG%1*FV^g>0oJFzR41k(PwnglV!STZ6?&~Df z>0)*bJ!WB4_wvr4#hMxIip#r{)^KoH^itRxf@BnVTGOLXo(u56>cG1+zUe#aC=)N>?&rq=m*6c-YJEf zh<$6O;*)}OhK;^a7XSV?hiH-7dWtL(kYt!_DL_&;?@oLB5EcX973jY~V_kt6>&<54H0 zPWArG*UH*hNLZ30W$|N;26P(aOH}*s$aLKW%4s=He#H1!15EwpE@TyFWi>ha+^wTl z3f(7PwM?zQUyB2vk*|F#w<&XE{r$sdy}hdazb-M1aW|2(HEz7eqddU|a=}rsQn2U2 z_Imd|LyrJAJT?ku(n7yXURapvAm8}$$af~qUG8sg9xU}0qZzwCV64QQFmf&xJ)5Nc z=C||yPPfWgo34?2hZ9#lx|PXOOzo#z_^jdSbExU+>(f!Gy=SD{p}A=jr3cV)G0KC$ z5~nP7cln*ggf-N`QCn2_xfU-hxo{tSU7V%WhN|>p(8PYqNV_6~^noQ{IvwBT}2>Kt0^MA_z&>4Fw= z7f_$uZ*g!en@EeDD8`L&Fvb5Qr(QN6rHrK@HLBUrbZvYije~z?-w*(yjKRo_SP!N@3pI8fpPbv>6{&uRKp)rNFq8GGcs) zBa#g7`rVzKrBEFEuT(JzT}yos&>$3oH>1IscE5I>22oe*tR?-jAuX7IX~!5a_=5qN zW$;o71J39aBL=T#l%=4D$y|9HLVGJhbF^cRbPT4UWSB3*Xe{M4IxHe+Gm1yYXfyJh z35TYNtx3-!gvCjP5rT|B2y^9`@tw~;H(bG5Z4<@5+ZBO zmuJa*UpCmi%X}-K?hVxN@FlPwF57;ZG4CY)lF*#(Z7*}${d)r_68_N@F@g9~Bc`c8 zVDh~~)>iua`4kr;9usXteF6FcVh<|&;C!?HpW)WOCV2gZ@_Z_0WZ_y6Uu}8J;TV6#wVH}HjnkAx%Zg~`CL;$9g6ToZX(vK1^MKJHxue$y+|Y(T9ZGlAM0&h|8mNo zRc&9op+!MMLM|LS@>Uz)s7#d6Bah=0$7|Cw8Nf zZ^^b@muN5l21)5D@}mM5mlA0Pk9Zy$*~g`UHx9RroWDka3aEjpeMR-ciA}97Y-^Fl z9BUt-_K%(xZ$PKrSL;n1x#w`bd&PzLnw|NcZNl!%UHC>Cc2$Cuv|~jiHrRd>QI$P5 zQ?0!~5*`Q%Fj{7o?yvO2h>>!WN9tdRvTP=R6D|=&BFDR@FhFNnx?Jz29%h=6hs!+w zxBM|`{DE>37WWOtOQ*i*E;Fi>h}b^L2q7CJyV!>=M?LMDpY zsr}?B?2KlTb}SOi`M0$vJ2|S^v`6;{qXEwBG=3>fX`{>gI=$Xru+X2P9`}toL2${0 zu|-oCU$`{;-!9xcJh_^$yo+DwiQ^OK?7{cKS`U|z@GGRIqxIIipWb$yN;&=|QTb5R zB-dedu!|2hZbk7Cnr24c7lPv&FaoMH5t@@b)A{h1H(&cUVas1O0$XhoG2a&+nj}Ak z|6Vsq(jxG9ZbO`~)|RjSq3X{g=J0!$)0xo~IZ8nlvJhnj8#=Quif}N&U&B63zwo z4lwvWZk$#gJty%zNf*vMkj7M^7+k-KCldq$V#O#&E5^*w{ z#~}ZZix0~UsIL$+8|T=F#$!Cl^WxZ%3~TDCHOj%kdnRZTlgo{9fw@sU`w zz6vUQ;BCK-PHeL5F#LuQK%89O+bxc#H7X(C$g>z2+{Or7dz zD{HnGuW^Ppm?B$q3~8~3d?<4_{*v)$qHK4}mAgi9t93MwS^!HfQ=Hx@qa;f(*+qz^ z`7M@&lxt;Uwdeh>xib8Wi`R?gnk`rfaQikW|0BN1h8JtGNA2^!>N5G`r`uDD`8|KF zluFznP8^vK(`Ap_doH&rN|K7v2uyL8^Z#Ew|quc7tD+{?H05K4Yqn@ly6!^LY@2gEmhyAh^Bm7T4BLA>ZP?*IA^D%Hi=!+- zHR$!%~;Be4t=uWhFz4Sp9V_g_!gSo1w6W>-wwBzb%))eTh{`WrGf~ zjX_j{j6LiLV;e1hXE3|e5gnZlBUBgLHpdFx6Fuxr0<8U4<2lN++q$Hn@+$30r`rm~ z6U?mV-3EF!&Chc^Z|l#i0hII%d;1C`x)_E6+qX)#E$odQx*#`6{TInPt2cxEOrJ|RE;wfIShJ?cl0SS zrtyWd`>c&Gmx&T|6n9X6;ky{Mk*kmGvZYO&B-yc0aP5S1(f`F*xNA}>nIr$rD0zMd zoPhkZtjJed^N6hkt1VCVPphR~7Hy@0y!UpL-E3OJ#MquekSQQo~*N}wCu2!Py71!13h~C)enXR$M4E3LsfZgG#9QZiSTW7gT-{@mUnWwg5FFCfW z70o7%#$d2=I`~MCjz z`BGt?F(Gv9*o0b%{+=_-_%CEiRZrgfy5eJ{s>9;=#0mKypK<7zPLnute$}SxCnd`- zt?1+XCWWWncEf~{x?TA$ssC%0WkeF}mzIFM6bIM~aEs3SJeoiLMiOyu*`+c2YK-~n zrI>x0yl$$rxlr2qV(u}{V8(3hlocflwPD;5| z?=(d#21*p9G$woNwv;ti$HcR&_TFupbvh6|`>wd9i*a5sZeoq)fy>W3;|I*@O5+0d za0NRN2q0_4|L@UXM4k*svwRa<*{O``rKA>%CfrJtjVdT{*)w?~WKUC+MOQu>d0VCf` z;apqE5nmwa=CSqe_3GkK-8{28V>N&5@*nnxgLHl|r{mWGMPHHR z7Wm0uJ@k+$mXl-F{C9Ue@a)My=j>00^inTX+IS!SPOh;VxKH81BlSL;eZO4}U=-%t$ycrWsAfu-}<#umCyREVKP@5ruoOG)3C=)tGHEKlL;AEHS^ z!6HfT*+gWJ!m$``1{3&kVfl%qu3U|SC%Im$>Ze`m)2`p z5$&RRETPv@|H4@FHPh_jJNKUwzNvFq)x#&CNo>g%IY$HZw=-oh@;8)!yV(I^zx0x+ zQO&D#5(VUaX7}>BRw}S7>{m8_w|^NDohpiaXOI~)zz&WFkG9dtlkUhWq`Ex#j3c7q zT8S)jzVCs*;=~#I>XM!uSAcD8glA3qvElSXt;L{S#y)gu6vt&#C!Bw2Bna$SCPxK# zXZe$v)!om$J(c7p(F%1hbuE|xs=dz1ZEjh#Rh(~WlxIT6!`_~ZSG|zQG(TZdfg6BI z_o&T|oQrlR3w?`X>zeh1e7Ppf9=+l(|7*W!J2H(Tfnph6$2ie#v0MVq3nqG8zX?;w zwz_~_>|UgqDE!~Itsfk!g@k}5f5ahcQNC<=Vw)G+f5+ABUp};E#H?s+CkY)!_G+B5 z4Xwa{a%TlkpFohYw?Tj%4!0 zA2h01H8&aoibc&r)JD@}*SGLlqU?F`HDGSNhu2ZUSf=RXmEr~DZ4VmbyRp38-gVAQ zQOrmt`$=cd?`jVgOZ^rh$aV=VSWePx_cQ%t@2h!Vd<0tsw6}i76v{M|y-LHE@`@H* zaddg;{oTH4AW1=wU!aZg748grC*so6R zXnD`YX{(amQ@T+6*@3S4OKBJFd?wqg-oTJUUwc0-w89k>^2s-2{R2$iFXbe0onGse zmx)>NPBkrw{qWpSB!0-f7uyZ?z`F~DO+fb)!0h>eM2aMDtM?Ipu(bSHMsV^Z8Ae?E+#lLraB3&pXQ1WbhRrQ;agnH_35Q6A~al_ zy(oSw?)A@VullSOyCgb0)i!M=xl87v(QA|)HyJzN7nts7Gd3lwSPBElQ;Xu^JB!m= z>+p|cZInYdEtd_k+)7Gx$3du#b~JkNwAXV%gn>I3SJ>qu_^#S4Z+%r)`R6rAI;LpyY%I-U%UirZ#9Dg0w<>-rb8 zq-orcCVjsor3FzQsZm7cp}8>eAICNXZD=}JoX`k$IV*w1qS#3dg-op|j&O?w;qwZnhgY^(Z(`Ihi5P>U)x_iL^&QVO~e z_MB^$v!7k(tjpeV8+O(0^g+XPQp&PmjZzx@KoWX3=BbNov`mMzd-5Lpll=pX^&S=t z@DVc<-+0)btbM#sbr; zqGEzj`aU7~5e(Ei^3FWaW#-PSpkS6oz3rnl(%ZIJ;ur(l`o!iCYv~Io4AN@I?=_t& zwaxoXCy7iH6FXO#_TT0XT(nKBd9bw75d- zxRICD-%Bwv4nMYP+E(_IXt1z4DFE~39PHo-`V5<}0&Eeuw*=qmE}eiSDD{t-QWOZP z4^<>~#^8#KP;x(9{dZrga%jjk9EoJ;0nWAejS zg}L1|%#X&hMMk8$z0h_|YeCB%8y^_EN2Q0Ck3V=Zk93Qjn&xhar=(RKeOfXR`jFYr zyVtk-kLQPyPpw@Pzx>0unad;AFOC~MQfEo$A~yTt#|^t~eBIrwLKi7GB?48QFbN-+ z1f_&*k#huaM(TooS72>Vm@FKmB8!`w9WK>4VpHVn)zO$QRY?Nj&*wYNRIk#*4FWo~ z=X7Jz9=!C3ucA4J5Fxc(B2DsfHi)nmE*t;wTS;xbZ*FSuWAatCjf#D)b@yGa^o3YY z&erzI#*lauKvNY2?}_MLK+S+CkEkN`!Zy1YArom4-G^v_=mR+|L|Yc#c-(i%cKC=c^_Vmw&OTC*}{^7TeY9_B9qAIPG5h1P|?z%|hV;t&ILhL@IJH_S{+U&RA(y4WA z)a6pp3r$gscrU{&w4F_|$QWN{l9QjWj(jdH8*Np-KN_(53q8`I?$7edG~%0W?_sfz zQhTys0S86McasY#jIj|yAxXAM*rOL)yRU~;a)#t1&qDkCM)7?co7N(%AXDYK2ss7o(HW;iUFC(^!(d2up*dXncjo zZ4uiHD8i80eJTmB1nT!$`YL>DW(jji*-LB9y;DZB52;EZ(`SNf2wrqiF;Q>#9;J)3 zPo5gMf1Qa~A^*#2vU9K8BD7E^;&fVTm{OY4CxYO$pS@~i^eDrY7g{)AfiL9$FMi;A z_LE=!tv%}yRszvL?y0#Q{*=^s{+YQ=*m2im7gn9J1_W+K=V&+>y!Q96rnN4W}A9cuFR@hP%@C3^_?Vt+$8|Ix*Tek0LB#hpBfEN*R> z&W^Q+GhoTUaWLk3xYYswN{+2s4;s8U{YaqfwIAeWR#fwaG4r6zE$ZbAm+Oy_?dNpV za4+Yx9=%RZX*zl)B10vaq{9kEtEUT0)BSCsO!haGStV-ko<=+y{zebY`i(-hx4CS-` zHME`P!u_|4;DJHyv37C$r}Nd)76H$au%zPVZ*uk&-x%zxI6t3K>rzfG5OC6HeW z@6aNZ52U}KTmTl*7ci!a?U^w^JL7>93?!=ss7MH6nLlj2RF_^q8h8rd*XQOvj-hiS z?QBvXd%usFAG{uoK@C2g<;d5t>1E&;s~}OMnP4)Nb`yFx1f)-SOJ{NIdQ0E%w1uRiPZY_F`|E#_WC9twf~}Jejic zl;Regh2<_IP%9k=zV0_=M5R1SLohdmmukZZX5W{s8eYwHiY_(?<+xj`uHVP=G)aF< zJ&iw0KjxvZaVQn=G7{7QZ-6WUIUhI^%j_0Ep#+IxTg^Y7@Ij|Z5}41)ia2@cX!8yO zD`sAzz9^05P0&}!m(9S~GM|z@eclheGX^U5y67wq;3)A@NtRMCecgpx`*_YSEL&sj zo^T86!7am#^fZlfvfF69QOU`-Z01_7(8{H-Vx-KJJ1IZfHFSF>>48xl&@ zsY#F8laK8w+tza_WzU1->l*^n4v7{aH6OfCAR@e>tw~XITGgQOueDTZ2?-| zgK_J6Hde1+u6A|jzjb9#G~47{Z``RLtP{nbBev|tJkFmO-A>i=z{YfbEiIUZU zn-<1+QI4Is#z6s#LlV8(Uu#p=5 z)%;OdhreQnP>)sGl3_%rzKeWbYL=j%h zJE=7_2k&)J{&}S@!IK0rZ$+#&YFRwdiFhGQd(VX{jK^?#k}9iW96w0*g zanBfCJ*n|AKu)_bln&n` zDb%oqm5y&vaTpqAuE&@7Y&|bSVfs%n_={ct|LWf}!1UBo8V_{#Vf?_z;us|NY{Sr! z92_t~+X?bBxoPx1iL7-N*=3N)#p6oQG zI^g6k1BYu0u6JThbj9pD7))V4D%yP#Pnym^tk~WT3m8z5))r^{_#=K^NcNjHVn=Gf z%KRDkwTEtA=+NE1)R#dMNXO3!rz`6Og^^k+aF=nZ@8OdkuAX?@g~4U`JbUF4`0jjA z!!?V}$R&a3jf{gY?Z*Vqhk)@LK#+UC);l~A#28phy0st>7qXtW7JJ6xZBETQ`^IJp zM2pnt?1;qNCBvnhDL`G_InPaue-$OA_mhjvt{ic-?dcZJM-yil-gI(O@)F-y-J?L8 zfiv|mnM&;dJjCO6$tT0wuvZeQA7T1c^X9MJK>zo!jp*hxS+_bQ{L$+5DeWNO zA>dKJ`*Bg|jb-i}#MN}%!3hU)Mu}_1_;rz~iV`39=6wx)(pvkN-3{h8kh?{yAJ}RGHt#>VtTCEs}w;tRorC z$!sguii<&(xn0C0H78A?EoUI#38~wp8=kJ9TT03t=L`a_6dyJ<5pL}bsrPBPHZzMF zse>HtX%32v!_)he@CY3Wq?%=xO$^wg)7FTBgtsSdCDW0UQQ!(toO>y2tAX>_AxgSYC|LGl)2XLHF^ecP_Hfbq#pNx@ z$DA1a?%zx+X^42#$BYW}P0ZX(XJal8x)hlC(|J=`A$_-k3#X=4*+@162MNh4uf~ov z)mwS(xwrc0W}jZ&VIw?uF!0cS&kk6xeLsB%bZX9dn4zb}%p?1|XhjU<-*!=Xz(tmQ zzO(q~I$g*={%Q-L8J9JaA^N<*b^&*&BE=nOk+Xz&-ASt6*ArJ{M*-`k^!?TV^cebv ztxu=l+`=W~H`w~RNDEi%kQ+he9pnAmyaJ#0kbV%z8cKQOiDck&MsMgGSj z`N1^~%m}^|=nhh%%AWjKHf*If6IEJ>Iv^DmeWQxH4gP+N0$djSGs^hHmhb+|REIm^ z{3pbD3DTY#8(E2%oo~%2QYJoLXEN4tHKBa`=7__9AL_C8?1AtC7~j{s144UmpinB` z6UuXe@xu)uAyumn5nF0ST8~yJYFKc0uUwO4Fv*Q1I4Ap~@FvW8=(V;xyYT9|0ClG_ zFzEriEw78{KC5CYSHhUMVw^N4OiScLMkbJ`aR`O z2rIfH3EP52es)`*73pE9^Rof40RDgMOIx#B$|;!B7VomD25 zC)05_ON_7x`Gk^MHiA@73VNi#ewO)za8_m3kwKI6Xd7XvpW;^THCOj0>+|j;!J5wG zl{7M$uSvupq%A1wyYr~U@6(D|!<5v3@ibWW5(_ljmk4xXdh@#Lkhgs({8U8sX8Seu z?;7TOOG1@Q*SnKk<~!YC2j3BY1!b|dEVl+wdFte82s8b%ej z1*A6O6{7A;#44;m_)8$mJ&AtOD_+q|9r=bVA(jStkCucnsTjB&{z*U!4nJ3atH)TO zg4X6Kg(x6NlqcN&>!$yuyRlNS5XC*=3MqR@IS(6plqgR64NsTk{kI|>*=lLG)Qj-( zaju9~2P?KIZ10?T%z~C#lXwAL5;@p&FP)(8K4J(>NdPmh$Uckj)v|N-&p)X8s``mc zxEZQ%4ohu9UPed5y&nPA9Rlkg*)W zyAa2F1w2#q#u`{{8cbxffLQ#vppY#Y!VnBjKMmOi@RaYgs6u zOj{J2<-Cqkerw)CoFT@X9XSa)02`JC6{-g>gwKa;U9WOclZc}u`wH$x3*xcsyg1bocxaUn z#;)f)8nL6=889w$qk9>Qcy8e^fDCD0`oOv!;3&>o@qP@7p(_ls zC;0cAHdL|LHSy4E=AU6$QT@}tSz$Fs1>NTE+I$f8Sh(T&EK84zH7n1P*(qH07-K%TLE;h~9>@F%sD z{THv*@FNdFvzhCJ=vL6*K$lsfsyw1?p zZo%SouPAs)YvD5Cdh8zsZl}Q8KIhKwLt0mUljlZ{335T|dw<@VgE zJsnU3^S1?8|MN+8`;Q%@7o*wz3sAU#(pJBA+~l5%_Xi##sV`){=CFT;z}6}Cd{-ZEeKsXW_Va%4?%kB=d-UfP&VbA6N3`&_U*!>)=(mRF=YtYrztPg+a*YKg z$ZHRw5YYFKEQcMovAQ*9cm7M zl>d#v`1S*Cm~@B)(Ay27dzB4|J*u3(Hleml=3;GLxcvv0v3>Jl`7fxzmkijO9vgO0 zDd(FoX8Io^R-((s-b4ii`hWG1qn}7A4NO#^Msoi!2aP7-rAS(m{MVlID{h)!^Eux! z7Vm~V68kRUXq2<}?P#lX0~WTbr=FXy$7h@OGiOv@ZeMC_uPB+r3ivc?;5h6Bx*Njc zx@=m${QXc+-Uir=I%z^%{Z`q({w17w5hv99`Y-XhP z%em}*en2L=Vg3Q@b%ZVFJ~?!G1JoJ!j>+8fNH5?NQZ*-aZ6>LTxatD{p-JWNiNheF z5?wpv%GdVGD_-_LcVD$F_-n%3P|uQFTv_AC2&na2;YPr9+EIO;29~s$TOqe`J9B z2TueHNuat*S0B;ASl77ht$%O-iiOVYxVe!7Gz}z%uvrgpYXNK^5W39#HpkvUQK~X0h46Sw| zKY5C3V2YP@VJmk?>4{B<#Ax<{A)Wu2Qq*!N+k^?7iHRIO1#pyEcl84go_1B~jlI$p z;I)&)`}-e$H%Y7o^>Adx?Kc|ie#BkD;D6`Cj=UC_AB9n7o2IRW^i=o*`F~+&1Yfe9 zR=5(6AO0Adq$1-g*$@9mKTt3be_;1ab)`B-)@$RppmY_@yr4?{C48ch{PRFqPNeYF z!svhuZ%tg%!$ok5pZ;P3mEkTrPmN0+m<0OoD&lu*z;f$X7U*b}?U}@qY$zpM=_5GP zU7tZE!$IMM1z62&Z6Nh3drxF+zdrC=*#r_;De6&Cb zFCZP!y1w8r(nPg~*b*ODXl@+Mb=1_ODC4>}PUO2K_7J9CSkXN<107w4{HWT5&XdWL z#jb{|4jUwbLs1qk7~6YOz3_LIP)m!nh@#YAc~ISaJ$Vs(A-O(`?_CGXq!yOfqGfxr zeRnnCt?^2{<%H+yF^70rv$qe`-e{Ft&F%537(x=$*F?)*4W1Xi#4ZrP`E+A& zZECVA@|P-+s+VvYle{|1m4tWw8)HV}uJH1m%t2408K5tM&@65CXvKGZD6RBEPl-uM z3!%L(ioAdeiKJad50k4v7x{-G5dlb}*Y4kXBBbn;q-q*|?*8l(!oE))hpiE~4g1R` zO_a+sD6Bo_$rY(YO-M@XI`_X)ZE2`}g#$Vw|jn#M?eoZ;c^tnnBGpF#X z(`Qc7)pfjZw^Rxwou8%;i&N;%Pg~4ts2zZ5$E0SCI2f6+?54}IiP=9V~2d4B+3Ud557#)C!eIe zuilHf*@jWjT%O}!J+`3 zSAvg=HT@oa`qFkils9hJ)BS$KO$YjxB$#j5yURv6ss?pKaBROB2-RiLaQZ3?MaY6E z^3H30_Y_3-iU}wNx)jQK3rAa8P012ldYiJ*6#vHzU@2s{_5IxQMdI~-wK&c0r49O3 z+1u6%7{}XT4=z8mq~o@F7itH2#(w+=@|bJW{;z;uRswyh^=&Ju#`;xN&u0GR)!;b- zBL|*Ih7iBQK9>q(pcpPcCpO)0Qf9KolzQzP-XG6lKorTWdB3a#II|O3FvyZUrb!uHpD}FIO^G{ZKYes3wYhrgv26+uTL(fC|4k{N-c;{5 zjB>GMai%fKc z6kF-h~W&(7rUz` z)&J3n{pfh-zZkLZ%xcwJV@&9y@A@tGzvD3lP`#QJo48suwM~q7K;0cVlA?IYnHyrV zavD;O&|C3D322CucZ`h^JbvvQztY(yFZ#)@tp`luJ+^lJJel?i=dxdw zk~Y~J>-QSF+F&pu$S{sE&;!vW=s|m=@uVf!ifgDL>{H(T9In6YWZz3JBSQ02ZaE1u zlMw%ky3O)Jfl7lpfp&vw2nkK~@~*s^U15vf7k5alb8Sxih_qQ)ZsC5bR#-p!yts`$ zics|azZDmTM8dxlqn&M10PGe=0(N-2!_$Kx18NhMk)IZ8y4nNe3ZFOQ3?|0VALrt< zL=;)<62+=J!N>^!S#%7;o@*2L_geS3KeJ>la&*hY6Hk3M?EWyh3An&I0|WH8MSs-! z(3)yZT0j2wjV#;4ALpIg5#vpt4|FV!%*{Q67bT&5bV$SqaH)koRQ(JBWfvBMqH{0$%42q-)wvEz-W_jO%9}^KpRS{_&U+Ozi{Ji416` z3rX+|jKm;u^QrJ_J~4bo=Qg=VZ(q^pB`1a8Q$KVGvrx>qw0=rspea|vsIL0vo*yWI z!lXbJG~MiT>HKNrble|S7ZwmYTn(V_^;iY(r|-~#g#tBwtY~Up!S%ZL77?D+*r(+y z10nYpTH8Dm0yk*H6)bkj{pGU(Z%8M6i-XC^v&S3!?)mt< zpA(TeUtB;7B+KfC{V%%@XNlK@9GNom>k>HFC;ywCU!Kc=Gk6W|ab_D8z#nV;kw5EJ zv7Rbj<`RI=TPy(@t_G~6>#^8z=eIx!xx5n;mvt=iAf4YuC{~MG>7b@K32MRRuGMhe z>$e}2-zdSYYxK(h#4XDB!({P8UH9cY96*$>NITvr>(EP=@u3`0M6;B0-Jx;E*x+`# z2=!y?5^J`2m-y-t&CJ)xd9TW@a=vjFTQYw^^nVM?t5IEH1L^+CAM){d?Vf&C7T}G) zcECDQ0c_YC6QI` z+(?$uuoO`i;AXto?W9`CFk^>6e^8-TkEB6{6a*?r;>nl@Rs%E~%4ue5DZzwipL43n z*_?VJ{p$T8o@X@v>OIlJcVDx_4NI=Gus2kbYf*DaD&&SAjf`b_?iB)%AI~pbsLuz~ zVKK6(%`fM$(M*#9n2e9m5a=@68wN=4`%O64aC3VnglDZT<@_Rts{vYd9TZ`HJVzuJ zcQRHv7*Z6rIy@7CJ$kwOowBV_Oz`)XwCb}DE{lsf?aE^!Ns((siA`Bq2=g}cLd+LVZ^W9lYdmc_%5D_E%vKs2_ET6I)F^( zJ^%s?AN}jzYc8kod>7U~WRLjb?BpjOSc6TD984WKGU2v#Un+W>Pemnsgl}=<3BB!b z2)0|Kc8uBAqo>Urql=&_@Vt*`%!_TmbI8*3>Tvg!?DyZzvT1pC%@f#hd0uixO66f- z;d3s_H6K+vqW+LU-RD43JnbAl$!0{;jLc69ioepvL5LBw2TeX^T>W?ww7?_M+;#-l zCG<&z4BuT5`QL!R-|xRQkvoCPt3A)?3sLCNr0hpHREx20+TYKgkdODPE-EeIA9?sM zuSp*#oqj+{$~%W;MgFHVi95La@8%D!+%p`nKgWN6ZhR`K$6O*OsHHj(l?3YoQn_6+&f{str zxSwA#N>JZ;JUQW{@FOL+#oU>_r1iLfnvlMDWcC@+^8H%}B0f{l$yD3S4 zBf8@L>w;`~GA>#_@?8WyL0T2iO z-sh1HbV@|a7HiRFvmyv#Dh2{_M0H3}eFl<_Qi$)pMMfwzb01RStT3wit4vW_t2F8O zh2G?b8|i^0F=lA=ouCUbPVz<^9Z$ZtzdP~RQ|bC+5+Z3kV*k}ZDvD{{*aFX=T~57= zd}qJYEb;AijYu@XHfef%a&fCSpZiRIkKAe;JuP}NlsP|fkHQ`WT=52?`R0?(Vd>6c zuW?YawTl90ztPus6m;9RdA*eiRKYv`V2zH%LOpB0}Lpv=RY#f2e#EjNptJO z+p{P&{78h|G54)oj67gla2zU1+6s)kPGql#f_|#cx!7B#X#|#VOc8H;?`$p1Wl1S? zbM}ucz9v()FbLlY#sU8kez(;vc-%mJx zVKQWVFp_mk(ycLiXRtp?BBZq!pUdR?oF$bDXW~EmpYepM?0^9F%l929YsattJwfp| zg{g7F;{I(tk1FpCuHPodMAD8#Kq+7Z41ma8V$&^BnN_1$_z2U~7!Jma9t4 z$>+c?rN;K;OXrKUSf?YLJ#e@B>1_*;1r#5Tok#BcNPgH$7-;rIa zEjyg~hVICY6BS_;RQCi7cO%oFZ2m?y)f5Tzw(ibdj2j3&iC33ivPZuMsE0Mzw0 zKmHvToYl03UOMxivIzacy5zmsOm`YB?_0Rzhk%)$)rr1Nm`M=~p*wp|-qY}cYT|B7 zFLuZM!EqX+P(6m!&gXSEevWQ%!UMy zNe`FQ%$PYg`k0s%U-j41Ybn182+D_st6R89#|iF$QkhtPS)fS%)e0@4+2l2E8GS%R zx0`-D=Qh==l$o-20fL_rBTB^@nyw~-|L_jb?3hnJJ@N+#{xgWCj#c`mz8E!+~ zJ(uluGaU9jEQWgCqOTLUf^`96*rCs4%lM_Omty4mm{V+QL=A(^Ub{clCAMN`PCC~d zr%DeO_k^>VIgvHWHX+pb4eDxtUfmwkzq9PJsNYeRuF1)V0eUOu%6YkZm6*+^rlPy0 zd*mU1EWV^2@b05C#p`77m6i7_Yy%Vt{%M}C&%%s0MLbh{hKdWsK=j}~?PHV?ZDM-g zO$`u=Xl1ZBhJOU9-qDXchb2^&-N8nzFSbG7uh5@%^m_7yD59@9JA4pKFFs>i==Q?O zgnM4_;wB7zE-wL8KyXp$%nHDk`<k2ed*oh8xkp1 zRvoY#kSTWkC`sQ|LJed9Vre~f&)9TRFo zSG*vVk`$z_wRNJXIpHQmYkl-dkckJKS;1i~JKP@`S=)PR0K6}pXXGhWM<=AqWp5!v; zUaa$;gxpK~E{LV`Bvm6+NR@Db2>C{vK8a1_K>(^Q*!VhXpMHEhY;h#U&n8DqWlS~H zySFV}5LuGHf~_H(Lf@u;@p#wJR;Jhaa+>?srz0@} z&p0>n?4O4@gv)6oa-v}I^LVx1D&+!~aWsBgiqhUOrFxj=Y; zfMx3svUBJAm*fj&E&jyakAumQ8#>;$5i62`!O+|Q6CM3v;16zuf)3&x4Z>7tSHAF< zlC@=zn(sPE$If5Av`z0>rjE37PId-~?R>r*x_>nybILP*5$qCcB{xD$<#}j37|RfB z3-(2yxxP&ld?Hw-JEQW)eiYe0e~km&64=j{6=b_JP8?J{1qKEZaZaRzzMZ@+5nMB_ zF@-u8K1Qs6NQMR5S|`NLPnyp3!Eb?r7d=>Z6}eowYLzjZh2+D8;4b+aS-PIHZmvsJ zXkOco`^|AD>|)QJHVhQBk0migQPhgPkCs6EIKY^Q!K3xsgi?1_WIw3OW}5gl9MwW` z1H5Ci-|U~A*YuZpXcIHGOzz~xPgN(0LR-BbDGH+&x5oiiNwXO~Jn}elpaQhmvKehD z<6ctdM#fK3`Nnwu3@Xm=fLSvKTU$8Hgk#qq)+>VK1;`m#pe7pYJ+}ydK-Az$ZDUI? zJRPa3e=6ldXV()0uK0H-rWc;6sOVI#=dKTS&Xppk~k$PtLy<*pW2g&HR@>a#qU33@WqWa~LXQ zupbLA3#qqZITRyF~cu_5*){%`<^{rYEdXy^o%BlFaHP{PB1lxo%kwo|EH zQdXL2Xcb;(pQG&;zs&4ldqSdRp&TCJ?4*Blaq8>+fEcq1X2((1#`Ws#ccK^jP z;_x->n|5i-k8q;THw&xrkXV3j=H2yF4j)~RXVj_5TdN+s9NflT0x4pCQA#T#|A)&h z{xgMj=zxi0EdH7@VEvC7TgGDhS+l6^s}Xk?%|$JFcffzMWu$0kE*wVEmDW>ha+uDi z>F~hQX}O-^<<*oS)6kk|i}vT>U~;U=wvn3)=(%&tbJ02MpTYiFVRrz4hSsl(TC3H^ zDm#OYJ?Mg#e1~${ulBMt(=^Mg$+LNpg0=?&M|*Z}rAIZ2t~P*z@pfmA<0QnK=y6hz zPuo;Om&p^ECTqvsv;l>IoGkK8C%l&?_o%AzN#f6B@h@}RD;(lE8vYcFu^vUJSwKaa z@Gq5VGW*e4Ud3X|LG#)A4{V|*_cYIgugT*G7AHK5vlE0>akuw&1CqFwk;V6I zrB2DLB@J(1x%{yJ>>wdoD`vu*#cb&DX)>>7ylZPZImnx3zuxzOu=$Pgf68w1|I+x(t~{r^uS?T$dv$F%Qsfo_|MH=c?#{*XzV$(g z3M*_la=)+Xy@5}03m!M1UT@1?{Th$EPkS983083=$j%?ITEh)7c~)>^EZXEJoE-0F zbspP~7&+V`quCexLU{FzW^Jrp9zu}*z|dqhEUInO7wxjN<=25=EJF{k<(KttOCOmw&6xlZ zI+3`v@Ut^(vk!X|erVMqIJy14>6>yYO0=H9=k9a+H_5Y~1khEHe7{aU!M1P@Z4b-d z*R9sED*q0(>=@IZ7!n7L7_;h#!I@&{xP4$m*9)wUtaIyvH#E1mxrgy!R6+z z0txMC%)h$fJ`F~{v!jN>w60c%N(DVF=rZBfh`YYC7(&)!~e+6knBdm2QBKhAD3Nf(_t_k!}DuknDH zA;Z_APu3jt6k-K-*a8#NJxmCaL&pFlloOo34P9O%1SRHl!X|$_TVBx(W^^qBA0OD?S@b}E9g5{|E&_2ztxD`!7GcVwq84YY3l6z(lB zW9}7&Op+ODs6eQzg4a|k`7!aL$Yr#QG&IEHr8I{PmRPNvCvQC1MlnXi?Obs&0aIST znFDKfXQi{#`5znm9zifj^SkKKwkDY>;hcGI05NAinKlYOd~+)D`*UC7MmfPH->Gw|$@x6QV(n`}WM3u9g*j^n z=NR&DFhtWRvVa^4poE_XFKA)7XP!jPEVGbPo5-UPMZAU8bl~4&Q8p3-XF-7G-bMoH z+<al5a^#(dswtnH6N;BrAx7T1oh(Q#CIV}1(xKRC<|N?4*6 zmJ%oDrZ}cGqlpp;Id(vage*~$WSicvzSn!Hi58fmtFU|Ux}oxc+M!+dwwVCaGvcY9 z>rY_Q@w*4m6^WvMd=WOzDJmP&<#fB)8LwH;u9Jn=I%KrBnP5$A`5JYo$dwmN8n@zS z?^KdVe&S+J{{UKq@kQ3j@U$oHi5iH4$pr_G3|9Wwz@rf%E}_>~$g5cAi```6{?iC- zX$IPbsCnQ9-?KbH6^QK}Bn1^wh%NWn1Sk~Ij8gZDqDIH+?Y+8zCG45z6Z1V*K`~<; z(Io@fA)W0O_DWGD25tt;C};dU2Opa);9j7vfAYVopUr53MEBQ-QagS2-wH_;86>|g z>rTJ!UczGdg4f&v^$-6)0)oHWme;j<$|SRAOV?t;b>)Ha?r6HnTY&28iDZds$R`|~ zW`DPDOAB8w7<1w@-;>I#5RCb!!Eek4w$HW|1NfdQO$0MIK+Z{ zimVJ_G~8~{2&9!o2q#yhD0PtIvLKeme4>s_nVUCxgI%0qA)Ay>cXcq%rkQ7dH)h9qG*@QuDH;(_{F75k}1(#@DFCZg=7jSFUFhpyj0c(!hz)O?;O|m zTiuqmI4I<_Si;1PWv|%AXes?xwQ6jhhhL&Rp^QGr)T+{Hg|` z0rsOn9v|VCTqS;|-)T8BQzOo!+S!s;#o{&R*3(yl4>o7ztjZmLSS$ENrA|p;^jl}j zj*#FHhA4+89pF2+qW|F@=FtP27Z1tnr<6CvJT$X8f$58bo@PB2&0mzEA`r7;gJ}ZkGg}O`^#QF#t)B#u~_uL?Ay*mlB4 z?m3+PpaFXvzLYKXLzqFF_$T~=^kJLHb1?o01dh427jR$%O&IzbM9{~kLyo9!UN@eb zg|wt807(7Y8q)O97Irn(N z6~$+~vvnXFB&yC%Z?LJ*@XMaU9>o7gX5zW3wI3!C)DUp3%>gaS%G+MsMFqv!%5E9 z*0%TJ+c$?N5V^kn&B}XN)Ty7Y&F=MB;!E~J=uB|-C|0{=ZB73E3vPNhmPj(0Vei(@ zz8T{t0f=YIBVV5#$H=|`(M`;N`{Lh^({ZbI7hUY3qPO8LT8oTGe&Oo z{X4$WDJ^vJd(-R?9J<~hy9pdXA!xgwg=o3D%m z3N&e8>chbY>RZDVT@Qf|f#(NDyw~eHQ2)|`<*T=i7-_3N1jPX%_WZN_2*V-qEN41N ze8b0P1Dlb%r&9CXT;S!GrZ+8Hyyob?&GkUM{qAUfAlk(z$qMp8>fm70VZ0&}bcczb zU_P2V3V!Q9#cZ)a1|vl3KBN2XhZqMXggN@^Nh?FcHr|-P+V^ z{f4zb+~C|M$_~5`w{d2WSHd^zxB%RVX)?3B$3yQ&{W8Xb>tMJByLX>6GCH)3>9;Jh zTK-W`FAtr@Im7$iWVf;)X^;1+$YNkJkO>?OLu4u$jyaEqZSW*0RzLdanR<^gY)H*^ zG&skFNv8s&w%_Tom-`*(k5O9I;Obr`o5=N-9Y0uqTZ1GA%RM6NTCI8OK~w*3)kFU? za{7lq*!NnS{1Ld)?Z5OCc#R!RirhAp*wBl$2lR#}Qd{XLN^fx70q zvt?|l4X*c3Cug7Yod!Y7J?&iPFR6m_VAXrJN#(7bV(xI*H!gAt8y=Yw{_r(lBfeYh zxmuskJJb*|VP!nC8`@Y@-`v!#+>Jvp!^J@CpKt~-|EVT#8Q}{z%0y&NbF#*X=@W{J zN2`{z$>7=YoO8l6^x}u4@Iz*?pTn-drk>1hq}RU@{)bn3ZF^2YV|52alweeF14w|) zK{}0e`a?b>A?plov;C+DBMjax-V~8o_B#Yi9J4Pg|Aiob8@y{49@jO2PF;Sp3%EGTSSftCoWJV8j^yRx_3l@QNEzpJAsr)ll=b3V3zAjfWd(9Ic_qt9r89}|GukYU5>y-caODN-C zgAfE|CXueJc1M+(JKr6GTmc7q7{0n z$U(-niEnTB=}Q)-`;=&^*d>wv?O`@`NtN_ElYSz*5^kX2noMT1L&04+$*}MBj?TIAg>$0L8wtOFV}_={CU#B zLGd3lCB23da?RoN;H<5E2CEzt1(-V-s|cOC%!^+T$a@K`gADyn@Zq4mqh;JDZSXqnGZhDjU>XuQ&@pqXISyP!at_k*pkyaZy#6Y_>AC`R`(3EuBdw({M z^}s+^)vUxE6bb}-Syq}DQjn-ii=<=w)B`2x9nJ8exGm zl>AED=)XXi3c5Kp`imuk`5aL)t$KQ?pWFkkB!&||kG(sOA&X6b13ZLGcenSg>kP5G zP+dk)!zfI#t)YMY(2=^i#e@evF1eeK7w)|xp@gd8z4~EOh_jK6Jo`MnQQ~Wsxkbe+ zD*^_F6O=8QD1YtG?i#B6AwghhviW4~Eeoub`up7^&hG>sb938bnHDm?Fnqb9skT@V z71P!{OL;FN_663n|DNw(ZhL-efFX?4$PbIG5QcjI{??H9iU=Ha2-f^p2q3d?R(zVQ!z^9?07Yr2pSrbitfEgZL%A_%#C^Vvg zqrl3OaV4ritSZc~TinT`5n?c^EV8nHxxBh=czSS7-*1^g<$KdG@SrBSuJ__8Gx;kz zMMy6DFW8na@Sl5+04L5ApuT~MC8qxN=${ozWgS;;r+;0}!4)HXeqe&8b5xrV`bl@w z`m!%>+e@;>BHAYd2CETl+qmVcX)@L zkBviGkwD2C!11RR^CzAx{9yf#wxcU&^sRXD29~O~z-G4LknREs`5|8J!he2jxo-v* zDTO?L13LA%iJ*~5ZWHyMtDIug97ZFKFmP9t&F(ZP>IJ3FStrz1ci^4AQHWfGLLwgq z{MtM~6nu@O(U>ETL`|;)lPK)>_p(C;qlarzj_4vy656mjg+0e6hZI{OE)-dLLf6g{ z?LvWqiaZ3C*3w}J58G z4B&NN_rV+7hQ9>g`uX<6wmzBw1abF)a~os8uIYL{uwZE$o=Heh!iaJ?O%vWFYsKu=N22T%%nHypYQrr3LEopC+L5Y zShe*oROF)>X>i$z(}`BvzU&AmxhLxERWTo_6;*u6=sX?s_!JzUWR9CldtA8v1n%{3 zv`@Ip3?Vrdg<`Nr&y=;b$cva~X_Vdy(- zvs@XHb4%@1{_+T3VVvo|z`&1ykNds3{sQiTOO_X(J)%6l?$_ZE1EOKMV>(AU0#*^* zzS*aVNfIt+RKn5*%EcM`DD`OK(YOwE%6tL0$(vy);VMfDkA)RMlbj6k42onD=~#{r z8wElnQ>ajvE@P9f%6|U~0-45$Wc_KulHs5Q#1w%DPNqlvMHJ|;lkev1T|7}HSuny` z26xE;RlMciK4Z1?ecVZ-ib|=6QKD}VqzSD{F1h_ECkS0G9Pi(jzkUE|dXkUTeb|Lr z2%<2LY}MU6NcXp-Wx?Tb{CD?b{9mO}DnT;Qaaxv^m88>#4eb9O{g&uI55=*qmAU$I zVuNBnziF?4P%sBD_0ITD^0fKh+_-4b`L5jqc`XBiV^e?XXzuR8Tn~Q&c8}@(3$_Hs zUbseOE{)sK9odbzfR-QJxFa;8O>`Vzj%Vd4OQr3!n<44X?yLM zPT8bk`^zf~My-F~O!@D9_aCnMMjadLp~>{?V;tf7&bBBQKVkiErH{CP#wvGean1Q z1=s%AQ2QZpLbM=t!KR{4Fmwa8C$+$)l4tTfGkH*0zUttq545H9m-GQ>r2a$UybsQrQmbj!uMw3C%Ezct*q_HL);H$VG#M`4{0_x1bh$IhPyk2~XI zY3r}je+55+r|{~Q)os>bu~9B}4dr7AlyOfD1@1+|T@UMQJzLIphJz%m5PRoO`+)(# z45)fU`2Z@7RtUf8v2>?K2x7M!Bjh;S@H-_8!1m#@M&oAY8)pzF4@PancxR!J2)C z9Q_|(cO!Jc&)34vF~WVucvD;{68EHay975Mo-Kam@(>3-VLFnoSOIm5Lf>fj64@W{{z*?k9- zyAg^MM#u2EjfWvbE=n_Scu2yRQF4j%ogtMWjSe>^P7q}ut4$2L_L)Bb;wRtdFF<;1 z6N;Y?nXqsemg`AP%vLp&cXlps0Nadp{gWrX!|@q~)~swtd9+IUEdAG}hH#tw=TLU@ z88a*NG#$2Z_dE=deXau?kWi-o3h|k>_3Xo=w6<3Wz2lv*X}TC4+wbjA&*zp*B@HLc z2V>gvZfqi1g1lUo=BHr4EDLx2!p7LuKsyfXVz1q9}kHH zY*Zui{=OXtZ3WYmUn&6LCDeK2u*oTzz%7S(wY!}Yw-_h7Of9T0B0eCRWyR4s2-j@0(A~9F$SuW((r!^>?zZPa%v=qu2cL zOz3OZ(_m4T+U|&onQ1{!2k1cpCy1JSZ%knl2Kh&VAl`sD5MvRdQzT^~E3f8CG~Z=C*kMExi)bH5<{4rb1y=5SKn*87y8Y!TF(XR#Aa9I# z!31{sVj1vhB=?|$+mKZIrT-;`q%p4@yMdbRcV2n7!a0}_va$c#{LMYGJ8FCN4J`VK z6nGk_6eq!Lx--u0t1}E4D*iBe+*4SV+0V3kxC|DOpkpg(?6!p#qiy4c#%z=G&WR4x zCOiZa=ohRuU@`MMk@f>iBsQR2g3I0U!u{z&NM2tK>K;W?;QsEi^G8gvDSqrChsTuV zMJKUWXNj<4ar(RgucrRs*wf2HV<(XXdho-vHAYYv)jEx#sDd->e%yTpD;{F_<<^f$ z53KjQTY=_stKB+yQ}*D#X$YDtDf!PWsElWO?P3)|4HQZPUtH>E<;-y?^rPP!fX@_D zi&noh{5FYw%eLx1{p7DcY<{|Gf={To&+Q~_ptu`B1!J?=E-->*_gC^EFU>^+Vc?l+ z@%VCx(!FFSrDmd{&w|y-E>sEd~Vb>epVnsJV_a{dXq5Z*WQZ_h{5{^uqg#`axmA)r$xGVk^k{6Mv`{9hCPtqA@h%yBAYPIcJASmtTkesNX; z+5tLCVG8#OR~7w%G0}Wq_I!S5LLOw=DB0f);4p`m`-7)P;5O~a|45PN$E`TROW~Tu-M2ur6lEs#y`&4t+(IxZiajt!$zGBB8($~g5Q-z8#32K7wAG7US$MU zCO^B94(A()fn9d_-kV78?cgSr+!BukE*-NBE9U0%k59BLQGIQVD6Ix8iq}xamEjl@ z_aHLs0YuXKOqElAr+1tzCdYm4uy<%U#po<!GbT@SJJXbY`l$X3mMa-H3v& zRxpl~#6RvIO5ViA!wci0%8p_Qj>>3Zn$0ykX>q??(>zezu{G*#x5w0b?6t*}xD-Qn zVvEFiu>R|;5t3W)8mVLMU9V|Lqbw+GVX6vIU3=^r(dyc}b1vPNxm6oZ#vjg-s6;2G zRHTzwFARPENe6gJW^_jAdz)Gmm<0fh6T{YQ5w zBMq(mZVeH`+yk_ObH>Fwu>Omzl^HrHrJp8VNe%Pv>6+%bo&M863{ZXWYj1d|r9)IH zA0N@kX?3oIiNg~+uNa3Q)|97oo*njMNH0vBJeg+_TE#DdzdeI@{$J3#UbaxKIX~QH z-Dza;RE_#RbmDklUrQTTQr6EH2@+X`at9x6n7#t}6HABXUpWchQrfMsE%?eFR}j}s zd}qKesXm5}#pW8@ccCczK!aC{SZwr=M=x}p*bZYfsoOiFDBAw34Da_OUb@q7{bByuaVonoNLNN`QLARdK-H_kF0V6V zJDFW{jm{#V>^CqoZj*?ipzok=l7_L*{Id9@>`*K6cD9L>*9L0Kf?;P7SX7s}*YUb+ zO5;K8ln(pDg`VxYbGmXW;}|z9;Fhcdo*3K4*N2=M^TM`93fw zno~d2>I;*WSdVP(6NC5{qcRM$QDqE1Pk*
    q1=-qTdIC8b6G?s6l>uw~N-albY# z)=S<)m)kVx{NvZw>9;%tyn}T+>Qp#VP>dhhqY-I%zvL5fkHd&UjK@uvTbY!)rMYYj z$M;c%G1MmSMTd_GMbXcRPzBDJVwpKTq}cX8P9TdX|LJ>wfB%msb@=84bNP_IWW7AM za5e8n>Kx(;2+Dka-*6TfLCSdj zOLZ=zVoVvv5%l~!<}D<)99VU$-b~wWzx#~9gOcbEdawAj|2e@J@nf<>WUAvNrQo7? zsxh%I7{l(qAXDiQKOWmf%-ZmxvAvDm2A^m2;BpZyxU^h=jX2bvP8G@)o3<2#675*Y zd*vF^LZmt@ujLzDdamvJ$TEeoci#Y3+F>zGw((c5ttxqa#(Zpt3m^i97l9MAPS4z6 zqmDd(4P>b`5waG4>lR(b6i|pKiW1WxP(+kM7hBU9l~Mk^;`h5*XK4F=23v$9ia3=$ z)_a(#Slv%9GGi*^C~J)jaG03vy=Lika>UqwGB9?M$2OVbO_r0=jHdEe5Q{yqOp?t9 zQSSHZahEJ|paSLmU{aJ-TJ!uiu1eBX0^H>#yRAUlF2t&Na5u+{!TK)!;`X97~ynuQ7vLH#R z2N5RAvK}J#aQ6AoI0oMXr*UykJveW=9lq8rYvnXP`EEO1d0ba=J!f~8P5I=Q^Ltfy zKKVYao!2ja-AUZZ54>pS#|cOH63V3aOb1xXKV5o(HaKYL<}mLvLM%19+iCovG8 zvt91;l=ZV8{>s?{vF?Yx8CneLK6+lJWKS|c|t^Jl9A6Yf&#iZWyS)AGTMo*Sh zZ00O`eqX298L4uMKdxChwee|c<3>Lvcf*OM*#H9gdPG%^=Ugd|&&F4a32)}X$`nyl ze~34eUCVtr9acMVp^2YCt7*lAyzc6AxO{#*`q3A+gyGX}bsrv&68WtpRf{o_5ArymgYnJwyqe#mx0tNxEzgp^ls__ zR8JlSpeOzv>1(VQysZFgwK2m6U(_%(N=||2-TK*Nx9m|WFIpzPfXNg$`4GJb7=OyI z(XF?b4H4K+wv+BUHqPoI&nVBH;f5@X%ZlBj@orl%dA8KpD~z8PZ}GtHNfJSQQcaA` z-Ffs+6enkvvQ_Cw+J?SO1+}3|}R# z21Q}gOGwWV0rIk-*zuI>UMi*cG_fY$oIbSNN_$BbNboNTRGfCiI2sJ zadrLP*7OBe6KZ{pWUIwyBLS)=R}ly@)i;m%;e#lcJI&5;wL5I6tsLH8QaG|GqeYJr zpi5d~p_8!|=gnXL@uexlCH>!#NR!m*{_euDo2hogGe6obQ6PynOg!MViPG&%h^|dO zt#E1TqT!_a#;2lta%n}(;$e8OJ6d*k#G2Fet{6-ANY}9;a6`z}cnYwk^Es_hFqNB* z6?ZoaqwLaNR8vfM7o|W#&zR4!nLgqwjIiK+BJ=nbBP;|mAqMoM*U{%xPj}5DSy8?a-j9L%(fJLqI%bJWNlH6&;xvE|F`%5h~`zgm`pD55iAE&^I_l0glIU?=<}+ zYfkJ|e=$erSA?oG3nJa`OzhjKkB*V^TE=PLht|_?BSU=Sxl2plCsW>s)&P1fy@kj= z-^unCyb()(vJ5lZ>~+A^ZWI_8x4oK8=UwMub8WSg8$gFy*Isfn(r` zf-{e&Ult$O@hkQ=r8!{L{9Yr~i4|mr>dm$@-eq)(ii~j^b=FW;}SkYb+EItf{j%*%L z;veKcww$(p^@0PU5QK49XF&Cl?rYE;Cq{E}E!g6S%ieDM`0#DybsN#a{ml0xWueE# zxTtg3A?imJETYHq+L^YYK=nfu`{7t;Ng%w-5=2d=<{QYpwKr{r6Q7c{gMua45A*az za+9TjagU}_lggbL|1yv+R>IZshhhAW(5@&+;dHk6`CxpPj zTtQV`Wk7_E(5{g)n4Ub#O4KmBg(|rHxq?(sjj@nEKFBK4KTER=>?K&lSyJQ9U_<5< zj9k5(Hp-}Isg|vlE-hZRv^={J|3*@u0Gwh)PiDo5axljc0hQR;pERn^<%!LN;|GVr$^F%> zuu=k%?ylYvv*L%+r=v1U%IwIo_h4@dxIc%D7Pr_$& zT0;1MptlA8$9H$Fc}2RR=4Ey`1ykl!j@iDSsrwHXo6@-t3V67hB=so_V|%i)eXi7n z%}=SQ#tzYZ**L(aGmxFICu9AsrbgGLJ!;N%-?gj^@+QTbDM$N~2bZ5$Z*hWo0l&zU zMdQE>$oW=Tj?(u4PZGpfFMDvrfSldKG7YY0fOeef$|fZOXBZyhOwG7X)6+(8mcMVS zx6OK_{Y@Q0(lSeB9*g3GUbIWr-1ZP;s z7oWL41D+^WuRjTpX?>mY&*!|~-u^9xF&)ZKcYOzPgJE+<+VolEeN-8AJH)P7DT=XpX5dShYZ>kdxc4t3S zikCjY?RRz#mdz-3j7yn9e^AnCpzo0_#VP_Hi0H6UYVD%4hxX{CSANTSHs(ntFqpfv zc>FqTk_!i*>*A2L806Z_H=_YdDLAiyY1h^=i5D?Pd~E5hOY4TrigV4PtaWS| z1(&~Wv|BMo4KU`?0CR+$%Ob?nphfr(BT_VKrOjih<1x*dDq64pZ7eCUn0EWz*7I`} z)63l6+l8EZ89U(5M9N}rx%6}xP!}XBRmzT!^EwA|4b?>x$v8W+?h!U8VOV7O|Db*% zamkC;aNpftBO*HvWr3QeO5;gzFQ?e8t0XAS8Sc^%vyVi7`@0^2{O^poP7I-xIU3_uQ;T7n5LusPBJdeG!}$llOM^=8#s;W zoAbYqibg>*6OnI95t8e)91A();$l+D$`PccO%uzo1|1>K42wmzK`eMz+>+5LmN9G@4VB1v9T%NnDT2@?Wd0Rax zG6}Jz!Pwg|=P-PY;z+Vsglzs*+u(1qNd-om4A#qAHiD{qWaVE!AyXHtEDrX(wUU33 z4y6-vfYVmrsdJ8Okz(+d@a(OB6s}Oqvg=Y2t+xK9Xn7_!M$78Wbuy@L?YOo#n!7wD zcvasLdgt^(1Svde8fSqA^HflIiM*WUoPG#hC04^y+>5!g*2xUx-Xo!y%goba@CYu~x9>HW( z0xP3XG#dhmhviU zxiL@BxD8Hy|KMw2q1xVE>xtaa*QF@!W>8gpY#~@mK++kw5G=J}-@i#!?hzi;{9W}p za*Qys|L2wr?cL0;%P;>JGdc{6IZCfLtc+!F)7c=Mg;=`kT_nC-VKnCMneoEY2V|Jq z;=b%se*`~{!)byT<=jwK#YMcom$p~Bknj2)^pE~cW6btXLh#;s)$?Dr&GONC7D-YT z)?c|S=&;iM31|ga>>nN1Y2ef9pTE1=jQA@`YdS7hk-9M>6r12lkW=A#dZcu7Ak4$0 zT7U`^^)n02SPVfQ{5R{@I z%4A`IHhr4VCF)0{TpXU_2QZJ@2`H4ddJo;rOYvy=7ewB?L*o6Y`rk^gQLV9kX$GWx2$wKlF& zMCj<78S`{IUoZ5iTdCLMcU;{``RT_6{6@siYZ(^CUS!%ggq-H*?JBusvyfw@xIH-d zScUhtnlkxbK=ODb2>jX6<2)#=to|8354=c(Ljo74S;Hq7MRjB*`B^VHu|Un@q@otQ zh{0jI=F67CnpoodlmrMTfrCG{IA=ne5}!9)ovt7=P7g8oEADTapqw7Af7>c^qvt$Y zM*MzgbVm*Z?goi!y~JP28%b=oYVzdHEu6&tw@X*`@JL2Z(=xs4F{_1Pi$nE{XQ47o z?<8&I0ue4}-Ok$*>6A5B_<+LyiubW~?bESMX(#U4Uo%^uQP4?MeZIF9{AY_0e)}A* zUyj!=+uXd5@15wz=|@I#375pu;Ty?BluF9X+h{YvK8Fn#>TGdqLQl9EmlmXKXAS~P zQ)&llC_9Yj8{5Um6l{xe-|K4U&8$`&U(U9;G4np1&8_SHsGdxHOljtWPW;3T`x&7t zubSC-G1^8^jHGY9vi+W4uKn&er@60MI$-9c`8mec&3_sov61pm!|s}J$50@Qdm)P7 zGL4M1W(DCz+2n=dRL7XDw2bw~J=<^a(A3G~wYxevN^Bf9?}cX33BW8XyN_be(o32* zZ3eT1jW@~*4=8l762%JOdB_;X%0ZMFszCi9!#yc}+(3Wpz<+mD}q^4DR1SUyn5 zdV-Mh54jn>P`NY!V&6F-*~YJTcZT(ESAB8y<)Xj_dXU@roI8*PAi%+EmiQJ;ET(xr z;{wV9=`vEvDrjUmYsVJeoFu0mS2<{$3AvXp3~m-LBe!FiEagB@Iy=AW*@l`>MyH2C zjnuE@qN!9iW$j_q-R2fNLjvQiHvtG)vc*3ZE@A74UsZoSXj;(adBDsovP+$xKy=KT zhx%hOG0#{ZB59e|dGV0QA7{JTc#wOg#qB##D2NAIvcM&U5c{JHV2F{rQLlJRx=1CE z%eHYpAY8zQJvv@4N7v%0mGU6hZ^k*Esw- z4!5W!=fm0i!dzS=tkFny4?@?YI@s}R;rk&425_!kL1DWKoJCnPvZF#)hQYI)SqqKT zo3dxoQcc!6| z%=ENglS4Wx{e`TrU7O;I0V6P2k7UK7O&h@s6;%u3nPbd|P!G|eV*TXR$L)jfu-iig zk_qISNL(LaZ&2;e)3#wtt4JVYO2k)nK~Rjh4-_Ng!-SKNOX3LkoLLxhj$06g;pw{YTY~mvZK>T^&HmGHt$3X}(d*>iZJDtjK zm{T-}1=j|FPGu8r z@D2To0xI?jI=I8#A*L#laGD5I#q;eZotioz_MRBrr0qVRU1ek^IP{x4TmcHIh;; z!WH!)EoSpk5+a0;g;-2;)qcqrCT^gOH*rNQb)YOk2aNu)rSO<{c3Duo8(`Oiu-oqc zpJ`}ZHp<=hbAVM(ZJdoU1Fc3d(^C0m*p~u8NrS8Q#uQay^QkU{UzKwvI-^!OMookb z%F3;vBiTCEbmCY(w2qbko(hMA$0bJmoy=n+u)TEn_cZX9Oy5#^#5_>_C;c&6M?t+W z;#8wcJw$nk5c9w@9nDTzWYER$CB~?{Z-AJ_Y_PiotEcKD5Jjr&r7!AikAE-(H*x!I z^ZJK^{y0AfK0kTZWb_;}hO~`e{^lH7c8H)YVcK| zS;_12)#t;@QIl?Wf;pv(eVaL`O)$z4>3^v7v%Qya1CLaTE!&b`-~sC3ls8ny7F= z04H`VjBGr04=e0JAMvf02hk(F1vyK`ne_1`O_>>R02*0m8F|rws?)h=V}jm|uTB-E zfL~(%V=e`X^E(~&H7)6t%9pj%?|*@;!CB4^e&LVDcJtHu@F&9i#K@AW=eEAT?0LJ7 zR0_vLBj+v>tzmwt@tXfX{AID#RhE<7guCNG&e<4i$?=ZT4W;+H&CnZ+>=$V=rE#ht zyio|oQQynqdE8n#F#TQN9uo-vnC8kI`%*SC<*q!~(%W<+s1L6u=wD(y!V+WFui&)- z0|?sig-8%NN*$(uIh&_VYu%H@ZQPE{*^_81>rbL9ZWZH#H!_(LUDq(kk}(}@1!SR< ztiS?r+@mU~mK;{(49ovu76!O8KAE%*f(!jMse4(50l(hAefW}1XFau>3F5ECd%r6m zdorTHBUgYFTRMioyrT#1Xyxq}8zAgl;e=Gq{|w$c$wYYdt^W$gg?Kf~-B*Z@-Ve<7%6;IXFQMtBvv^x&~7sAfF! zaAzq&GIo#zpi7CkcZmE=Whzk+L4Qqk2a*&0Vs%<$sb_{cA$(Mj5mZt^qAwA{x4@BH z`>ndx#F*i^1-OR*XKN!%*mV7DOSaP2L#@af>$$y?c5jpU^z{e&o@^V*gUl_z{P9}j zmNY2lqX?lmR_dzpqtj=qNdG$;K*F)@^4gtvdxU$H2FBhWX6<%&m`JT)@)7e?6GHkM{fcSR9zglB_=ICn+}f^5XNf`OgBau=6V(+B*JH7Df|OdP z(*vRnz>%C@yf=ImU@2c?LBoDe>xlo0ml~6(DFUfH3;RYK8L%`(B5+<627HS;H>&WIA_{2sDnE|3*!wkX^8f!K`uQQN(D-eQX&QYH(3xqfE_TO+x%{v# zCPYDkXi?ALsNrYN(@361*aEu5Tc0(YzhyT^~k_|cHL?s%!gMp(Z0RbAE z-xzaYd!RcxrA-d#7%q6JZrBzOf%|2^FR3$;VS1}UFj2pR-wHV?Ah*~Ln)f82WD!E3 z-v{U1zD*L)?Q@zYDy#_vhaxSjlX|)J^Ye0DV#$go9-+QgfvBOs`9oi1hd-i>?=CMzglG* zB~HKcVivp^7AT}4#6ECxBe*_H64Gat&yxxZmIp`}Fo?7J`ad4;G)Ms;nxvYEhh;4M zKXwkc``QP+P_|pT&jHu%kT)?eOr+un(%R#V*&(P6L3PP`C2?d2;!!Lfl{WWbq=#&U z@q*?x)tg|{?!g|H!E+5$Lf#^hx4hKjCWVk7`Y(x$R(O=L;-yl=m^&tqBq7^pV?$nN z{bKy^VsRKE@2_$L2}`s?&;B@Jp;;*}SY6@&=WEUy=A@|Vfx9w);u7`GNuEa*Fr@MQ zpA$ip{aRRhT+6@;`j~5rnRuMAG>B{o2R%o&W(r4rYH5; zcE3&K6D}N!i#-N*3R=Og+y{YdIwSw-c6LmbGJKH(HUcI;*z~=Tpx$F(e4Rns52~;M z$c`&cQjaZ4BC{a`TdUsBp8NdaA6QL;eDeFZ%5sV+&!5OvV%fExS<~TsY*4O(f%Pny z`s#3LIAD5Qn!thh+r^pSsIvvDrEP>t{HHoFb-Wv1c!;b&<2a4<~ApuN(>0F}I zNUYKLyA$x9dDIrB$t>pQ9kFB0V)>X`xcpUuF{8{i59hK*Y0D!aFl*V)_ zza_`VMV!}Dw5Bi3vKqwsL-hPR$A32@@~!Jr;&5}bwT= z)`hD{zCXQFo_{_kUeN(`v?jOPL4IoMlh1OAmXGz~oI`vqn9GQ=f(U-Q*39Iz7wPst zvwn=igQ?<^dWVB=NF>u``MXk=-@BPM$9Hp{!|63sXFZFQ=14fO{Y`~|&-{rSkGxrG@qLjLg`D!!Z z`UM3%J0{UPBr}r?-=i)&@YZI)Z%an~V@2@mhQAWrP{@;nGOa`~@#X8;G%Hj~*^M71 zpNm=5TLy4E#EIc(bpFN2?#kaxjAauMosMH9oS-&4-bi(}ill?aKa>qu;mS+x#fXBB zAXynSqzoE{uSFy**yCMT&Q-{9EETlX9A)oWkFpG^MXREg_KXKsm%o6X~EY*oC^vf8K4E69eNPnB|eM zuB{f%laFWu$fZ|rQIz&O*MqzT@6do}2LF%9O=bfoaRbijkH7#uecxfUV%24AhVIt_^$Q zpaJG6DxM@-G)|>9=EKarxJ!v8f50lAwJCGD6OsIU83oU7FYV4`Z#p(%QHM_K(y?_D z>hCZ3I~m-IY$>`!=rnkDl;_wh3cv?)RZkBXQ|0>Codwa}5(KVDl&r#@NvgRa z)0mLABnjJGre66IvJ{)TC-}_>?5RdlXJ(NCr8$BYg_Di<`WoCS8eO>BA?e}WFUK1* zq)|sDgo7-6Rn>~dV6Zbx7yLM4`)=_MuKzh))eMfi`KfgGnkM)q#235{CaM%|t)e6S zZ=PdAo`hK=je?P#zi(4dn}$NacQ)&W*xN2XrR7J1MwKgW=($IGv&Uc7jfbWT9NIDO z8a6w4eC+Pn#6w|U*L~hOY{SA+%d^^3xC5?%M%@NJS#mWuLQ6^oz`lHN<*Z{=Rl6oi zDiaeupyBWW^mEkzSmr31u2 zHg^5Ta~&E05@sNCp*ZJw={9rJX-ox~A83%F>|`~ed}%oRKIN6GU$%Bxl3G^=XRL%Qvj{ zk6UJQo;ocgl7KBjNiM4ZM=h)^1Cq#sG~rb}G0rz109!a*tOy1|R`3!kpe9VjwJz=* zVzQ$YrnImg4zwA1@PsJG#H9;UM04%aQKFJ?DO5fB*-fSo1()aentJEKGHGb>AY>p4 z-*)++-q|Q43Fb&bN^NI zFk)LQ3$>a^3Aw@Bi{Ihz@54(a(iKRSK8(#=Eaeo8*Z__}I&{7dT6!H;PSA>LJPUn6)0OrnRlU*sbr=MlAYZM)r>r(tSdYi?c5PAV+IotQ-Qr(KdKVk+e^=!-(y<$h2%c^sjP5M?8xcEYyrBV(KPwF(%5HEpkIh^$`7qj`0CSKVgftokD=dkfSW@w!RtTPdz;Jw>F=V>u}_H(wM^fV4b|8^gL$ zQvXAbNMq#OPC6@58S?W)fYP_&i{76}1^ubpAob*IW#nQS8MvPZa<2MmCQeH#|HP`o2=T*f8s;|5Vx|!2aK@Tb?f!yF+!nHy%UH82;b5y45 za?$><@^@cy;^51hNUIy!PHp6b#$V7>>}zX|>;Z5>3-1Ye=-oUI1|=t~6FwLE7j*!! z+l~9lVgjI90gG8Naq7dRwFs(2k()-F@e!5ud+E>2ng?=kO0|loJdAsKfv)acmJbVu z$i6heJY!1^sNq%+%jDn-6-wz@mJ2o+q;xCY2A;h@Hu>=blj#64lvCB0JozpHs#4o1 zlMLRDZF_3W*@bQt2@Ip$L^%s_*0N=;Kiv7CQUh_M$EeQyx97-d^}d-ke(o)>^F!m!9h+B6@)%$#=DAL-qFE}xb3uY zj`MChMxcM9=`eA%~*((7_Txl zXY-juInAiWoMQLPf?`ETfd}^Ea_mHYn0Fx;|D< zqD(ft$oZX=8}RX(p>j0xRxNB=;ADSK9keYAtvD%VLrQsLoA{vmpT9zp+lz1lIDYzN zX4T3B(IY*;x4nbEgihqZlc+U5n62FT+_pVfD`ZGSY5(AXONGZ*QIBHhq#wHBF4h;& zU^S-uMus&rMJph{@7)*+7H~pAcfx?YubI=sbRK~I!g!io%q&GcNS5y3jf*7|FolRk zKh13IUl5p;C97m2fs!{6j<8V8j3wL^v8m);t+bP8h2Fx_63R4QSgR2qq9FYVXOar{qb^A8u=?t|n;-IE#XBR-&h2-% zZ6}Vd-+sLG3Dulp(K8t2iEi|`EtX+EHmk2XUKRsE$9cc>t@bsfJ~`IjGH?R#JTg z;gtOx3$ZXpG9Z9V1))R>HFo&emGXeafl^=7x(A!|LeBBsI5PKh$CEu9@Zep-Nh3H;-g*R9!~Y3)PmUvwUj`q=;@P2dLBe#vv`amx z;lho8I8%yb3s*O^d$2q9r|j=B!6a*XR{zyDj*&FcLJ5HMNQ=C{>~Uq+fXWPIZmrvL6wZ=0vh^mUpWodZY|0RMAjX!zxbnIhU6*B2yHdvV4CQX<_W z&6zYQlkh<=NPDpP&%Do=q#`JxTQlMm#bQHR+7RP6_X;uL9T84?VTYI@I#oLp_}@lj zeOF{!8Ud3EZ)5Fm@UiTft~3&YIEhaOhL1)=q$1_Oj`L@j=b@()l++x`?#~(~&1L~MB6}rnyya=L3`g&kSXiqo7o z@pu)YRh)ahs0%iR{y=(P8Dk7u!z8REu2o@-5aflAX^e$B$v{gWKD7gA89CMw;RqK- zj#KDhQj}qzXlRTs5goGMcL*U(wGvW{)Mol=p>oZkyffOc#Rk$jZoGqOrZu>~z@yROStuwje zqgGaQkbY3D^QK@+6blv5>Zc_R8=b5{<1V#sZ5wLq#sQg5D~qS18{(c#%H|Jhvs5pP z9bVQa-2Y&k&tMShXBU~};K+a=e$ui@r&lI)yOHdJPbBNh1*b;kdf~_o_ZGSaj8+9R zmW$FjsMOvCsQ6veGrE%gl1GwjUCw%+7C6d@m+l5)pPo@?MvfE2aW!?(stzf8EoPl$ ziuarKf1s`Lr)(!nu=f~QbcX+rno<`vXer57?fM2tPz5cOdFcC!B7e4>&x5Yg=cAkT{F^@!?G{Eq=G9`q}(Ze z6BZaY-maoR!FERf(N!r}aVA9LX7oyHS;h}|lMpybz^t}SS7V`m=Y)U%h6!t#`OS<*u z#IX?*T$N<=l!n`u3|G%23MQ5O zi~_#z-^PyEIz$RHq!7x@Oa}^w#U6@28615Y<_pkA*Y?`#Fx3>RGI~ow-P0Z)_kB7} z#GhhQ@QG$xvQhlBvjmr~RX$u*!@dHopR}qT)1z2}1sj|h zPEut*`qn*c+A?{c2kaUFeL59R6g|ijYI(&=S%`ua)+vBpWB6`iyo27RVh`xl3XE-BW zwUp&pR@PDKZc`H!DZ%nT^nl9#^oQ=?J}qV9h5mk?;@2iH*O$rVGT)UwswpGNbL&TLdvOnXGT?ssnsy{X?K z=p|_Mkp1+3VmPs3P4)4ezo>@?-#?=6Z)f2N+tZvLS|YRWF z6_84<^GK{-qVk=rLf3ciNjU;H4x6~eigE`fNlnxWel|wT2(+>@l>`N&V#w?FSYi6m zyarW9df(r=;a94OpN{j`vci4ed1higeh38nE5NDnz&S5OJw0xgdL_~yT&dM3XLcmr zw-Go+0+@bF4SvXaeN^A{9<-#yTT6V`XS*0%us@+_AexYsuxnLU3{+=<1zO(+$+mh( zQ9$NXShSZ7#LKYl zRd>u6@o&^6?bb#+6hi3r>voQE4tCcDkk`*tjYkJJHPTGP@h>AqZxigWTdH>QO+Hz^ z4i&A>DC$h8l@XClKIeJ%`mM5+YstzIP$AW#>Gp+Jr1q<5zgXb|1|aBT_v3n2NoFEx zj;i6D2Z7#Hk-_UPzp*9+#1`t2ccrqO@0%KFf$wvR9LTf^Mm}}LN!sj-(o3czMG$Db zMe!78&M(n6W%jcMOyK`ID5-SijkUj>>SAI&C%i!Tzv0B?+B;E`mLk>**tY@;qmSz3 z2Y=UHESD6T#AqjN4vsM~5zk0!KglelCl`tI`%ICFrX4$I*6l72#s^F?2dn$lTSM=A z0I9Bmyyx8fjOm-gYtgj2Orb1vL1`^&TR;SXt|)-&fQX- z-PHYa12kh*SY}KSU7CJN|}@Y{1kREPm`a8EcVN5Sg$JLyW$-g+{$_oLpHfYqgxL zB0i_en?H7SM|wE27pYwM`eA?NEiyg&MS(zWasMtm!f68PE2mm&VKDd3Irk4-Wbuc(OvDA(r`*j6ut> z$D3qji?sCWn-O6~@jue?pwGS? z-@BUJ*?UTdlMocSC@)w6O_!=TxoD90FPv5uVYEjv^?{(W)t$f}S|kID8^@;D=3R;n ziXquR0d7G3%_3&SN2MlVVZZdj;`bhp*T$5TkW4BQrcFGgGo^Pbzr%|X4L!dyslVAf z&_XtHR5km-vmH{p!teJK?)edXI~=eAfWLK&3?8Jodu=y`==E9o(aYih=cAsZGJ*Xv zA_fiNM9qkmrA3^SwAcnReTNq*2t&6f?)8!Z`ewWI}-JMPfGA)%tx5nHLiOmQg z$Mfc%9Xd;V;>|3?$je2cI^kGPfw>n=*nc-S@C@!tTI79S08VgkdsoO_Ah0V)N!-Ms>+AEA4H2o-!p9G8 zDHzQY^+%%<7H`w<9S)8PVw%<>p*3S<(ud7wip-IK2Pl`a*+si+{la^{=;Ryl1^-kF(Nsy1CDV7V9@qS~t;{^IwirZC@b(>}90}%m%YfLP_{QZ~ zfXPeaG!j@M_{1y|S=V`oUsF*&VN%HVizt?vR{gWRWK}iduCyb)jj%79+4pH52p#sd zgJhyGk?;+R&yT2Xfk!t5%85F^B5D;70&^bZ*R#BEthoapXe=5v9hf_-z(maeOko86Nrt_r$$z z%+N<_n}p%^AMg!YidiMNWBBwn>ewh=!%#BelzY76=F#aG@uR%e2&@YqWqXCyv%oyP zbq`*C*>`IDkN+)$ou2U{-WEhRG#$0vka+eDpnsBbov@Y;v&fEU_dzYxBmMYksOXgg z-<=Xl6@w=i(ccl@76)|4=f^hteT7WanrXMKSu-+vrDR>!(fjAmhhhfLwgaai003vt*A!3p-ZbjC60inja*!eevx`sgJhVww2n+!(4@*c1Q zPZg|!s?y)m_#vMO3&A)2VpaIuX75SgXVsxRhXKbWv;fC-79-jxDic?IMb6P`wGxT= zV$aa#7}KG^$`^NC<>0xCP9h#pmx#aLp$#2JZ`X5U@V|47ipk17L*>;=^^tpL6j|!Y zx|{mvH#q5eNeW+(_owk~LQ_;x!M=WK*fmmw<2SYfWjD(uCcLB04~p3VGcLqnfayh! zqg4N={w3)a#^$;u9^}q7lvAFr88`B8=ei#Qr=fHYo*?S^dAB=}+l!fF6+qK8*{zSQ zxWsaW?PU*jgmq7alHya~Wu<8CM*8!D`yWXQOAhnwf}=jH+%fb`4I)Op#W>xo`Ha8DU-A z4>D-^E-+xqgty-^d^O z4)qtLQylMh_G%?0Kp7uw5he2{t~bo)MiDi~HFpQp4p(Zazn73SF}UcaGEy3J(QmPr z0s0v_UTmaY{=|{o*&?T-u_c#oGG@#*qdOju*k)#X21-+ED4!C%%xd@iLz8%Z%B!Lk z#{g`)Ngc`14R*!Gtcvcuxs|~h+Uv{0-e@fH#jZ{SkjZPCCtjL*}4(Mxu4M-O6iK)ni^;&<7F>) z(SL`FrI`t|CR^AzjG3^;Q$sX$YTcq^st`&x-dcG~AzC6%oc{kA2WUOB(7B~%PYH{Y zJS6!=#0|6x;Xk(H+RR=$#qLLmB|-ln zp2OEqqhVbIIdrfY;IkFF;!Hz%>5_tjcZhOX=E8ks!vF+37$)FnvnI$8ThD|jGj2@M zFYje*tz(!;1{AU1{nDnxI@%_0&S?Y|_g-LOZE9NQWg}5xPdj^EfMB|OLZe7jP33xO z30(fCmMRhN>vTQe!_ARkT1g)KKJ=hdY=Dw4>|1?x>3=&OATe`Dd(YQy02|uaUWuPB z{qyeOaI2rhe^yWF+ovZ%+PBW@B}bByPj$EI+3PlunG+P4&osKo1@W}B0Ac{H&mV&Y z?MD~0O}=lW)R>AY1wZ3USZTsv4H1@}a`G3;0(4ZZz-HQU!^wF`7iiBQ_lxi;B(MrA z^Ii6S@#r5Ntu%@%>g=O%fLq1;xdqH!A;BdoIie{AEU@jq*~fO%Rso6TX$8(NOC`7f zf5b-XYK*4MWe>OsO;2z~f_ZnLhYE6FoRryYf-nZYSXc=x&8Gzg+_F#hPd@SuFM ztzaTZ(>^uJ|M{nNtHeDET6`BqJq_KkuREFK!&`-Eiy$xH6BA77i^9Avq<@B4pFi{& z=K*!w%IZCb#eKbUt#dI!%Ed0$7&fWUN&Xt0id&jimskKemDY;9E&+SV9BB18bQRU+ zX^Yp#-OHmGQm>NdVIa~*hiCaY*+)S|cJR`pz%`8TS#r;V{=TMSmr?#;?J{wB5njA1 z)|@FH-2DCYRue5A1fMvaUye`ORBt{MbA%3vC6l~+N5B8KfuDsW^xB@l6a#QhtVe zU18O;9NbxA)F)taw{rG?;FD+tkcC7#|I-LxJtN>WzrMMdfm!XtF`DH{@YR&f-YZ+{ zvh1yJI^QwcY+lbYUgQ0HF#MiTd3QzCWb!g!9~2ZgF3PP6_^>w$-CL8;4n9ynz|A1H zT8zFl8;o&}Q~#p=@xw&yLTb0d=bTN?+N!4mni1b%pDAv3)ljziz~B#qw7lqlQnSng z%M)B=1(K+H$6#uXc%&Yad@!{RsP`YbuEbi(XV;#CtmFFBHCG z?7H-Mf1j(m;cVwTS;jpfR7@fb!7S*>hr;T6R{219{#uC&`HZ;WV^LA$Y^|4xgBPit z6p6R+bFr1c-xecwqm7;YrAy}+Z4$tJh`ogRp4Q7K#=`rNJU(maBdSGlsL z*{Dbq`gFy%F#B>*UXo-%a#rrssjwtpM^RVZqHMf1J$l2}-!j>pxk1vE9_2E~G@axS zsQFJGB|AFz!kAT9t7j}Br|L$X%W#`0bG!BaP~%GUApIBbfjmW`9vdYDhqk$-b3$}# z;4WU$QZ~pwL{gtSeijX#EbYizBHTfMQJxUVLC8C9=t2tFh0|VQt6q%t9QDsH|Iq0* zcQgs|kCII)w(a4HjYTLgo&imdMz#l|k;UxV{S}5#{wg{JVY86i*#S&Joi)&ru_)%0 zZge98JBuH<%v9^e)!>Ebesi&t7nE7@PX`=m2s3>Sumi)F?HQwFj#HoXdLwQ*%nsDc zT=^vnEF~qgQ2D4AQhje`087|ds!|M=?pxICe~rhE;~a#hVqnXzHh1h+H;26E3c5+_ z&ODXj;xE_QUCO(si`dV^?7Jz+o!KEc-xp^J5JtLZIO-DMzPkJ?B!k+qe-S)O_^7_m zU^4r67knu^ieKlWl`X_82Ul#*eTFaPXro(6Uqr%er&tzb*(d(IpFoza%KQ z$`wPC53**tdZl#FNj<4}65J(wsASv&!2*-(K?WYvx@GIk66LWgczsQciBKQ)TVrls zZ5r2*I;zTKe^Fp+-I)?k+>Ar7(U!??J5qa+sC*f0R{8k;H6V-Do@>@eLli~DadtX+ zCoF7A^xQgg0Y#>$qK>g@foO--s$h4K^quX!YGxN9i!kDia9Ttpf*`pPd4Y*hs5kd$ zW#Z?~z^|)41<;w}Cx58ZOvKGjN)V;Gwft4~k~FvIY@7kBRfA~P)DpGfTY91oR~&Sq zwo~Ol{6rcaLl>ekQ3}5|n2x;nOu*!|PE?2+P-{5m+w!Bu;rO^7e8^`mqp)>-E~r4h zD`BkxHE%(smzbyzqWdSBf7)|29vchW;78=qjk{T@2TwdWr02_d6-TL#kCygxnk{8$BiaoxjhOz?jd4>_;;y%g^V z7b+`=_j)T|L>#<%e9Gvw|FFYxsb4|^x*Y&g#nlQN_7VKXCGQsAbQSj(!Dv_5(bJu; z#=a#0EiglbDXjnM7ysU+a5wrsNGYmrfQ&i@KCXze;1TsFEO-&`!Vn*R2YhF@jx5w( zWog0k$IlEdATXBfY``qB6uFsLwKgcugf3QD5lz+}s04H_2c~tD^az;S>>8gh+g{ev zg!*$htRmxd3*42VFr zYriv$g`$vGbyJD*FCv8(_1bvh3wc1YlAupUIV@_{O`+iUWZRPD@WgIaXD-N)mb19D z6uDk^QVyWrIo5S-OQD}!d_qoyfU#)6p*%h`ZnLF9xTeN#h6*QP((RjHjkOq4Bv2O^3#dMbjS8-A@UF}xziV*+fcCAAhrU-TY?Ao4 zsaxw}pzofZv+Cw-DUVVkTuFmS_S5xGa1@f5Kse_L;Dk@DPDuLQ>yv-jTTLXyCam zK;2OJ2!M8YH@;H(Qot2iJV><>pdzgJ&s{}gsZ9@x_Ar8u=yCi>_WF@!=zH>gaI%RR zMnvsYoP+()+C}r1x$sR3I)i)Kd2ITmmY){;4PG?6hmtv*&}&fEdCjfAGhnH^4Mn0K z9-eY=RdjMoyCxzTYvEVROD*MF&=lQRXQFh|#+yANhtY3z3=!WssX>p5;#ZU+S!vZ% z76xnM-3@GB^+f`a&Kerv!MLHLpT}5A(VXr6mqX;xJ_Qvyb;f`1seRF8qLJG zsN&i$U^e+2Q-W8Crzkl+jdu0!h&c5~c%0~hD>uG@CjTJk*q4Q@XIG-ZgG%LO_0?sC z3H#OUvEQOxf2l<|#p7J{GvY#e81I*=&g5m0QMx)6YhNae>;36$&~QX$I~s)4^YM6P zp|?-i)qidY%^&5uMDzn%Rx7vV;)Q$DqYzu0=Wfw}k)?~iUNC#9$^o!RGyp_Zudm5xBTE0lJOEWx=}CXns6u_v_iDw*OUW= znMPxKjWzUlY0lvtQ^c|)hlNRpxgkD~s9W|cO!a~l)OxM4(!_y|Z$;+#?@GQWP4kDA z&~K0~vWoX-C+`Jzg6HrKHH)1YL%wvO$_+=?QDQ&U;vN$=V#7YvdH;!8@*1>v|B2b} zA1g;7ThtN?o=8@KeNV0|x5h_zZ}W@@M)O};BJP70QPPX)MGj@flFMkh&IS#G-)tjorC16hPHKzQIqu>7-Lo?eo#h_+SrOhMrQv~ngk-G&w@jI*q`2&Pzivy z9SsKW(zB|>mpqEa5;9Cs{8%z?@Sea(Hy>WE-aRrh8pC~uV2LpupXf!cr)((lo0ScF zo2W^hG?`?<;)rHhCM*)u)E(>H`xWd3ib6c(pLK9q*$KxP>BL zi}V&XEeEO!q>JWz$s&fDL}hJ=?{_)@3nAQl2Jk>Af(OD)GV*oxrpDiIXR+Zs1CiaR z7{}%ouinKnCgnERrzN|cZb_LZ5-bIaSr?B*)K6t2Xp0Z3*pqHrAGSxJd^v$DkT~hP z!>3;z6?m-dul6>qda+^lM7)=N&;cEY+%#Ou&)PDFzmVq8p8*Q(mGKgVpH2nkFQPUW zKQetp)G!fEkU^Kwj0(;Wr$9Mhh;wqy)D4N)4AX#Ywo(ooo1i$*{Gk*`8uO+0#N`en z6wWMuy7r+`h38@B z%%*he*O46FJ3h&bKM_un;5a>%*yON0*YnJJLe;+~df=KLsJk&LuHV*jwCceu%Du3C zbT%?M9+7r#xmu}i zj4)6)i4(r4VO|tOdk>3^K^OuWSHTOY6Bo}57<;wTyGH8%3*GCzothYxMg;2540YZm9 zT-jc#-T<)Zrh5E+e6z6fr&Fi5IhbVMDCm^(La@`lfg5z5*R= z%edUMn3IIv35df(`TBBh{Rv3<@ulKIiQgysYWyrlE4}Q5;PRPFeWC^EEYA#3(RyI( znvja3ugr|_9g=?W1}D#V1VbSTIB!ovo;f?SIe>+5BH^E#(8cr#=dslaB+L~Qs^w_2qHgRW05; z$ZUT_f?s8SghOzW0K@sp*GALRs30i(II?;%v2uYp2UYK!l3g;4_{^K2vItuVa)Zehq6ZhX!C{r9tnEWz7O zjII0Fu1!N&c$-kvjI5oi)xG7J&F4@!lqwvj(tEWT(ton0ufImDjqw zvB=T6Qmg4XpJG`O{yyDjC|WS3mx{JH|08ucHjQd>OpAG_bt+3?L(2N5aD32;W47&E z{H=Je{LF(l!c;Yh--J z$#c<)_t%csF}8X!h^f45&>_Rvt=L3l-9YxEl?x@(6^&vtASW_a?xx$k@ODiJ&+<@P zN~h@{JS{>RFaK(WcTNfaY+n^4l(d>%vVV0c4MYJl9a9_&7MK=zy!ZGRLNGc1-ShWg z8*f(W(H=F{P7u!J%U-RJx}Oug81i3EI1HwLo<2V0+QItG_q(1dmPD!CBQPtw5al}t zigxiBq@nFPsKCmGj<-4ys!H}ZDdx98q@>N;p5?1P;4`YI-zbqz4SXmo@ot_44r87$ zaP;_$MouE|nS zSpH_r6~oO}juJkIs-}$JCcO3E%58?F4Sp$}UnKU^x1-GH{G)i`)|6?rAwTn*+J$>v zOd!xmL77jS);Uf=G7xxBfnxYsR!mK{q#QM@7EY=YD7BF(Ugfa|4PuVS9Vlg%QPev5 zAbXrx>7LhVw9McTwK1dh&YK#O=x=>iOwB3qjh zWPGe$nuRbLyzD%yNfd@3X|9?KLVz^JPtDPeTJJ@G>Up(>F9A_-=N-g_h8%xhE{X+4|!xds#Ow9Z2rCeRjz8whpM=cVY)6d;!O>vx3Kn2^vkp04ue6X9hMB zd6V0PPLYSzh^m2iF5dN ztXnY%HwTOtOt&*LPl0HBC#EJdw0BuuDlLun7|tQU6W%N3(N!w?ju0Xh+X0gpLfy~>2 z(u(!ck}c({_m4m>dQ}S%D^z@)j2Njw<8Q^ZVg@FlKe)x$p;=Ep6=xqFU>Jv_(p;l`dC_i9{ti($9Cu`Cd33iS3Hxm{sQtcTvO z0fSyeF23C5-nzDyLkEUKw_xzkV#9o@&q!r#Q7@<;cTV;LgM#3onEpYyP?9FZ+^wFa zr*k$=>F(;_>O-pOek~zAB%EvVjBQ~^A%65sgD;XrjrW>MZVnbhcO=D8hTWq83n}pQ z`JswzFw80i@8UWLnq^ECop`Q`S*9JAI2Z!fyHA)c1OMeu<5KR#EF;ClpO{9md~ay| ztG)+abXUsA57)Kc(X$^>98<5#s`tGki+|^1OisT-ZIo5Li3jT>!}L2x?mH)oF>e1k zr>VlBkJ3bgJ3<0c)w>=5gz?>dZ=kazNBL{ZJQpk38qY6jC$Blx$jIa~Qp&e#Jp&w7 zHyV&*#dV5pchb&Mvx{4z2v4%(i}TbDh|!3@t-XIuauxR;?z1H!dp5iwY4T0bx3kI_ z7?EMF%(=TBqS|vN$n~>pK_>X~_z(XTKlheZa!<`QN=ydQx>(K z_q?y0NwR4jU1$T^ym87pLd1va8NKXC?zzD~uI3WlwbcvJctOA%6SFybeIY5@EB)}R z*bE}E{mx8Jy=_jkrPN@Hq<#2%I<99ui-P8r5hrAMH~pW3|1PTbRtoh8W-MfNlb&w{ zbkxjSLBHwN9NZv8w0zI1{A&q^5tfl* zxzdb~hUcKzX>nlG9funK{@9Qqxzmi@Dv_0MfsfF1V$GKQ=R@$N_E`j<8akC_ocPg< z5z3=0yq9b*bY_2f{>o=F+pt_Q;~e_%z(6rM>m)={&kaiP?n94-evCvpxxEt=O+WW= z*{1lSDL*FS7b1K@RsW|h|4C>5W$Vm)`@hE^JNcrN#in|(aiuAhDX}in%Dx@=i}z}2 zdX_K1DxCAy&w?uQ5LLC?_|>gQPrf^Hn6M%;K@{EXC^~;wjdio%+nCYIn*wM;kGNWP zh%(AAf*3b;rehXgdyk_Z8)5jDJ9y`-pUL5=p~ix=iZO1Ci_gn z?KW)nh$3^tdO9yDDsab4BDjYMXC%Q%GY@4xS}SEJ?NPX3ikd7`nDHAjrTn0o7LuL` zgRI=Cz$*ubcn3OPZ$d1=mh=@%HZVaOz^C|z|752CItAxBQ-ZTJt|&(V%LRguhO3^6 zjqN9u9~DYvBwUX~A-hC@z!hGipXRxj;;Jd_HdB~joMN>wISiFu4q z8l$9Y$2MWtk%ltLF+DKW3iA7wMP0&{xGfS#t_vHIk^Qy9Q4b0B0jK`??T)nHzMKTv zNs0g55lq4HOehBVhGQi#o}F@oQzhTa9zIhxGFhP8y!i<3hE{)p(Rl?N0Ae&|(nAWi z5PSRv&qyVlI=>OAge6JFOumcnzl4C3{Fdej73IBGk{Ai=7yH7Y%^fxOFCN&5CggBP zLu4qczaSz--A5`p!9BpV758>egZF=;$a;8uO_di`B6 z5*b0R^BcU>dS8`qiM3~9;vsIjrpDzQm|g_fdSvY)?M-k(sHg)nG8f&ZdE+^Me0O}i zk5!QD!?JQFc)Tkj^Tzei09suANK9N+ZD)eEPB(nJ?N;dKF7zsPo#n6l{r*m69cvKZ z?va6iQ*&Vd+TPi_|8(cQ)$GLzyCl5a$xgS>NS_4@S-iJBV>N4ac0@{= zTkGzkYB5oc4*$9Z_ijEU_fJUL%cZ$hMwqsGbua1;XJ*i$}w5DRj?VFqSaF)!RFh#K3q zxX`z2jA)6em@+(>?(Wq#pKXM}kvnG^!3ih(wH8n{J!`ryv~o|RVT$1h*`dqc@PtVe zAAHpoC7u!)_=LeejRZ{3}Lq zoe#pfbmXTZ&!s~A4X%B;qtt>oqSOky5m0#aXbNU&N@Mkng<8{};dKs3^ zKGep}njnTFqs<;!4e7Z*+63XINfR2eP536Qn3(dr^h|A9AB(RYd$rkSH!nq_?&HYr zOOKh;qfht0R4;n^km^kq3ni_|Z7hPAkJ{cA=79E53s-uFSP=9qtqX?4Lj2^Gu9TMm z+5Pi`^^PhU?3vd1#6fOwD2mYj%b6qTF+$Ay5qpL+&d434r8$oeL2hWc`oj)-b6fze z#~npZX66=lHYBli8La3YC=L>w$Sv7xoKTL$^erb+okBm`6?J(Ciwd;~Zheb#dok^L z2R);>tb2s^6eixdq{nFJhOxMv+FQ5{y|SKno$%S$LN_uJlur)a<-xI;X@h`4GA7$O+v(*313f%j~uF*WRU^tRZ>)iR6K$CM<)WXCWTQ z_5y8-FWsW8_SL-PYFS8tG>?MSzl(VOg7~TS5++%%uWL7~VUJt|;zNl3A?u60c0|*E z5jsTd=7+Mn1iepuzWzYIO?dtRDqRW~sePI$Z-qjW_XmhcNOTM9B54in_4so>Y@Cyd6XZ|7pG_-fj{tdg*L=_<85$i(c>`p4NzFUh zN882pSmOJ!Pr%xjl2719Z!`smpHIF7YBYsDeyh$0$--);()r80X*N9pnU z^zZ98nq;lxl%r6jIV|>j1llz z|I&KPzr`7~TCGcjf=|{SeTB`C@(03P^P%nD8c0WiRIOH>>3Qz1<|_F@Uhg;I}5bH?3Sc5C_^rOG0?JJUFn z4G(nntH&8_AF1&nho#9CzUph>GG;;DZagTdcdCSe4@6V7&*($Uvr|^j>9IS(J|R& zViiySwSSgUO@^D6{RmqLwgUXiayG6?1oB&FnGnLiuG`+(G&pEM(!^&Db5;=;Sagai z3xNFO6^&q5WA;?0QoyziZS0?KXr?1@I$0a3lz@JdpMv{-GSvCMz&aFX(P8$^q^co^ za`Pb`)_X)LH&1|LS4km}iFRY4kRh_T%^5ZYO9ze@J&w!rt^yj=Ij#+uXv(kPJ4n9* z#>((_yq$6V1YX?#K>Am(O|p|@qlF{#5>?w7?h)Awf?I#{2tNkg+msIdYM_Z&)p_o4 za+q5v4YTv@EVnqCJLVP)#!h~7_*4s;`hP54g+tTb*B=b&kdQ73=@2PllqlVxbV+x2 zN=rAAqY;pjZj=ULz<^1Oj?vxm&gb|32fO>8d(OG%e4>erGx`sh(*5$!uZ5Pq%tk{B z4-|zbc~^k7P0;QQicKqU(99}$MP>Kt{IT;rvR+wCb-mmGZWyZG@d&PNh0wv^$HSY1^o{^J8f05jUk_*jK@H2pHjbIO*68}aiu6d3@fNJ$YL+nMzXJ^Oo`5*VH+5A_NLyu3Z#5_E&>G>2nt6vduL+9Yr?|-glEIE25{ZajEP+ zwYCYP0iM#96+QWQ*S2xRWwRX3f(1p?h02?+ahlKNIH(~|oALIr$ZF;o08k%m2#zdM zk5A%{PHtNWi+_bG8=f(!Q>I2mSgWaVPA*UCjP9N*gQvastxY|{oW5MHh`(gj{&*T) zrQfgde>kQl4}})=7B=tO=d{bX3OGMBb#op!&g>gPtdyI*Q7%}1Phg5-4h>;aXrUJm z_cX>EGgKxK3V)=uEArsVNL&TnvTq*cy?XRC$`3>E)r7VTI*)ObmZb{fhVA=9(CY^_ z(6T^W(C>zF1o++!(}?W-_)4&1>S=YDnBMmAg2&j8oMk2*cgvuS zgohgSUADd?Ttv-xf-lsd6#Ms2kRNrh1kY9Y-V;@Kf<(MLPueTMJxK0&VtkJAdBkO< z`NoHa?;l>n7q=-6i_{IS#Fl5D*4d8+2`Yq@4`)dua&IQ4{c>2P!HZqd ziZ>!X6k<^C@7lHCW4UE&4Zi-#CY^}!**&TzQCk`$K_rk?KfEyFMD^^G(hcparM$yAcwabL}(H_VWF)Se!a*@>N`i zsKcA6=vV8Z{9HKSrtWUj#nj22K8ipg9MINNxMbBsp&fUptE_4SDA9-fixu1Fdzzj?f}fLVL21tJ!||(t;PzrW`DwOvu$!FP7God*!>dTw(dZg0zM2gUb7btQ^4m zCLAa>PQnpSE`iP~Zb+zsgv6~SLW?}=pu0*_6Fp#T{<{b3^a(}&Svfjdpc%&|V+%Sr zSJlb%j~`82o1sYOkYM;sB@$F*$U`hVn)@VQpDW`W<+0l~#p5YM{}T_$hA3dT zt3K1xYS8<@N8{OYI4=$*d(l7*O$tZEW>21w#|#q&EAJSo$AXSJm^9e6v0-A$B(brL z>$V=f!;v_UF)cEr_+kY?Mzp_O=OKW+nc_nT>m}_@zz-&Von!CcR2-OleorERc(^IB zw@6uX?7iY0#ts_qMay?z^x57V*|l)ajPx(^<`zC4RifvmqgQ9pr&gIuw?gEBdFH!` z@Bfm7`;vpxF})0co_P6RFJ(Bsh!qnqrKguA=N=`+nta-yFBdc12%tmGUm_t*G%HSd zzSXee3^$h=MbOHLL4z;K6TXhs7%()zHu9Ukw5{=PIU`Y_Z>IJgy+X$Wc3-C`IVR2t zpMG0J*SLLuvhq1qkrwoPqu6dg>q=E`e$!pbQjJ% zj#&lS2|dr$4Zr30+xKa1W$j7pX2`}G=?sGjr$yyOJr*iB{D3-h=fd#P@jZwpYwD4u z_7E4I#YoXG9*l_sE?{}<$L>AIB?3Rb@bUvt5WffErx3&DeIzssLL*@ZgmnWI!yK(`kl|Of~WO~8R2d#}NHW54!Wjf^xjD5O5u6?nF z-}tu}PLGH~v5MTMK~>*=H^^Qx8VxJ`t%-*UBxH`(iuu;wKfcp9a%QI^iaRX_Pih>l zOj6Zv{Q6skW`RiYd(aa-<+Wx*JU6kE;7W_tT5?f>{?Sw5M+GX})E1C|vf@5nGv83u5w*dBcq;u}vDE5z`IF*rWS<>w<0r2A?<1E6eS#aO z-kSZjwq=Gf6!U}?%kBcJcc#PaJ5eMq8Uw2T*ff99^-+{@$ndGv<=dZ~$Q6dZmn*Fr9Zbg7Ej8Au?p|!x3^AAuJl!tl<^7q%yaSa@@n@B#Veu$*J+4O@eN~3t%fEED4ZU`OZ{1^DYR1ztl8)Hv_6+@Lf4IR zH1#qjq?*f@YlwCtzJRa@pqE~WxV85bg|-JP+90L(QY8`_vRz)HR4|+bOZDn zw!~h~U=oBNClHHC2fH(EBFp@rchn|*Pz6ZT7vf0mx><_i9d7;sY+rJHyvLjZe#IZs zCBNz-FD@FtA|X{eQLC0c3G=l{MenuI=2_wS*$?zOMG3ofR+Y~SV|`13fv!NWvzv!R zfeA1Y#UxCi9E{Abl>(hBrEE`=S5+?9P>%Vzx+1}&O&QF=Zl{HqTdA`j&Myuowj=kL z{XWrjggpwcu+tBM=P5NsG6m!H^x>qceB%x3PCotZe@q`x#yu6M_UhzJ z*>j}wM#tYh?{>xv7W|bD^a+$bF>ZQP<+&k~BnAW$o_G0ounu1J4X8{P9It^yum=dr z)2Kh_XZ5)BCvsS4VtM8HOt&K`wh2g$btD=xVMkO4#ukVByS%pUq~*o1GNbK{n5;ze z-+r*|WXy@f*2l$f;Wo+BH%B%@HLDYth@&h-?+a|l8|JlVaqKE^*X+z>^ppp+zi#;K<_J}NZY z!HG0)I*~3txM8qH?cs^0UCC|>V(~87QKS4_87XtuhWojI(nL*Zj@d5YUCd;Xg{5eV ze@Ku^e2=5@@)XBRg9?IS%I;7?`<7V;!zh8_XPwN2n&gNzT@+2*gloL<#8#TH;QA{$ zt8*W6N$?%RBPCqOVm+(Fmr001rXQ12Chz#?pc^;15YYcIqW}9CTNTdEuOL&TvHbI0 z6KN>_E0mWE~JSnF6y$8W!E%z#u!FYPK&X4-+5Mu)r2GG>sfLlSA6TStCY8NJ* zRJO(+jJ=clx-nDb1c~-WLNtV1AzyamS8U5!xO`7e&!3_aO0SM$kX5>yRj*7h;Tn*? z6wzLn9I@4;b~Z0Bs8nz|pKR;%X^p(KnU|{LXdRrrm&#qxOEszm&N+U}We}rzwb?pt z?aT1sag#fIX8v~#Wg1+>!u(jE5@)GKg4Ng#|MT_dpu=k>j5n|66j$>a$HoX{ou+wc zTfW-1OEJqkKwIg}-X3e!CVk`*Ad66BTUO$Wn=dK8e36^GX83+#u2-Ows{5>{?s zQYMhuy*%8z9^hAB&;{-6@eGI!y{THVJzo-NKIcH;d+TI-`eDj?FE5*Sg5j{#sZxlC z>#m%PTwtqsm`Cd=1FV`5q>gl^B727n=%jOWxbgIsrchuqNwR2R#95-Ob(sjsS^*m6 z&GGg-Bp>(yp}(+Q4!_JuZ6AHq#sHBkGzjZ~QHDoa#v`GEaJbFW)Kp!! zI*5c4PCD+U$PE-N%$*!JN`GKaw=Ow?_INRsx=olnCpr!h4zwK}V6kVW_<^TZR@*Z4jSivOoy%15 zEFVCz@NJ&$PMTl4Mqv84dAeqKz!J&pMomZ8KV0t#mLM4Vim+$iB0SuFci$cLB9JF1 zaEsd~LsA|ClNxAoio8`vb;>wN{?@i=HCEyjs_zUh?IW1Z zreHYH88qQ^wVmh6CTmcuUiI`TPfi3SLl}^!%1Grj!&$Hi!8wLb!?7Qck#~81;qbQK ztU)k2Sk1u8hG+&Mo#@j*TF_P5LQ!|Z6~S%q=@11$S)3PG%9==UG~a*=(q9fl0z1+7-aFv zT9-FeDf56mdo#y>>qTlx&qP7*nmAedRS&mWjE|Ml0ejAcCqOJX?!2cy zNs#xIPXZf5P5aNKBpWYFcG*#5zqc@QRb8lIBMMBaAeFB~ppstgYk`->_F|6=@~6cD_9ZJ$%gj`S7{C*`7Fdq~AEwdN7VY>NAC?NfPCh<80 z?b>AE!{=Vv(fL4SGXG9`eF=+o&eUoI(a4QWs?Jc+FAI4p^;zLTD>sEb2BiG_Pug2* zk1?S39Ch5)6V+_IsIflcJyG{qY z-)!d|=Xu3&aJpqlVGjay$Q16~6VRhls9URI`fc7BR6ijxM50niSl+YS?Tz)#<%IjZ zG#;7HOLEn^{PWUNBG}3&IZ(l;NpXtile?4u0q-P!P)Qik=N{`U(&!0=-t+(M=_k>C z?QW?zx4s%jV)SWwl4JGdbEEElQHiQLxFcc;1^X?3T`K>1`>~$G9cmD z@haQn%-a$VEU{}MS}-bJ11T>7=8j=#a6tulF9VRF{P1)8TdBgr2fGZ=Lxssv4k?9~ z(d*s6lF1kS8y`Q7@OTS~AK-R=!(*7^AB-zsV<>94_iv3NJ$e_>iO$*zs={6Yr%L-j zWC{5!Dm>NE#)~^Za`UkON7$WpalS$H8*^tgJ*LjS-p+mWynv$G!=qit+iMo&L`K_RI<^QrXs&+K;PoRFJP6RZTqN~&U@!kUOvC3As1?69 z#!tVO%-lF}4uarYB<|g0h+H&r2j}cy6o**Aa`ktgPFlQ&B{G|~xhK$qy~1blUWO1T zDK_|=?^AW!rfALn`ise#u;gD>qk0$rs}JgcarzJBCZ$_uUc8ymt2$Y3b?<2547tf& ztK501{2=yBgoCaK{A>4_QZRn-k-rixM&g&X&(wtUW2Gj&iTw=TCB1It4|e1Ywoze{ z^s22T(%w}{zh!l-@3&=)M=|y&&=f>|Z~gz9-BB5%Kl0Hic+wRBT%Vt(03J`n*meRq zyw9|PUjy|!5Fw?4Y1heKF&S9ydk;SzSc$%;CQ-WiRYmo&5fTt+Z=OC#s@hJ`Ou*~DLjVIh@14L9)dHGa>l8mUhC zQr$Tu&^iUXO&vrL1X!AA{nAB@m9HO2eZ-?OOvrofgloQfUAC4csC5QKF@BJavSI1* zBx-Y+F%ul8uX&%FoDA@M%aQeY>YMAS=TV3GQ+}r{yG`2L(usJyZmi$+gEH8^sD?~Z zM}S}k16n#TvgttLKY~=2WvJBV{8nwCq+D>WPAVs3!mhE{AF#p8>Vmp2W-+tya%WK| z*zXR-?9?Gc=FzQ##zrgJR92MvdmNr3AlLDVp_v#M0dVTGW@x2$B!0K;?e$tt7G!)G zEn1VFFiK+7dq)b@u*hbQHqlbLS?y0@Iis)D3&k>rD=Y zePjkiSTA2P=30GUS}<*R*JeiBh6YdEa28LdbC|pSprmM}T0k+1bTLHUX}{aHu2!ur zGbgHZhpkiiy>~MI^%8g^eesZhd67z8Q9|P@TB$HkN?a}D1l{?*=IE}Z+`XHvz$n1H zX?=FVXq3%iZRHZrb|7%fq;ifxTR%BBvte256;|L0o;~`=xn-X86Bu--joewdTm3t* z%w0rc!i{Lp?$h&0IhElHRVvAMU+228koqyrWll&g_tCwek)Rll$vwmA4fdxR0r1TW z2LV5N?`W8pgDWuOF~#ZEo6==(F506%n+OqDj^G$|+oX3i6GZkgUyMTalown1N@Q^0 z2)b_NjkGx{?L}D-Y7lat+Rai6=faYELuK)xk9xki>Oxg_sW}^K`B_aGniH0KO>gd4 znPfDzW1!bc6kNpLWGp>I#fAHm923g#h%5b^4@VwR#988u>hkU)1+ z5nte5#Pc^Zj((?N7sa4?gbQIq6PHBr@e_c{H6gQ>}v(O%gd;bStqV1RY8z{ZU^Z@EEr;I{Hc z?`E+SRQV#vcle0@Up+;DGgL`u>Xa$lbJ;XMD%f#f29wsY^0jDYGS-gn=x_ebAhb>< zwz*KsQt!wrjo4ecDZkz}|ACP4LHamyAWg=2BDKQ^Y#f6SxQ&966tfY1^^Ol}0@ex; ziiylf**9K-6Ksi0s|&c~pD7)MI$UNKuE1l@4#*~fbESbkSuX;QxU96F4{NFe=Tpclxa`r33l{AyItDbE{80wA8)5nXG!*C;)=T| zX_W0RMlKWaEY3ss%F?##c>Zm|m6Lwe@oY=#mGCmJyFWIe-vvOGwRSRP^LxEqfY$5->^c? z>#YBiGZ_E;dUX&LHA1(hu+^?R`%^Y(ey`gPt4hq*kQIyi=V_Z{#*F876JI+mkq))$ z&Ee*;6y=_-He+fH>?-fL_%X)O=(H7ajE|hfd!=0(wj~IK(~|EsbroH{mQvW#e}*#|KcLlo9t}M!%j&CPoB9d-g^0w%1~Nn4aRjr}q?cF3YYY^0xRG|xaqF8$%=-KuJ_>?MJU<{+(=VT@l2d~o`TSo z_RB-FE5J34$Tf#UuvCP%{s@!E1Q2+<^|9X57SO=?4AWAQb|`-#C+Uo-D?Q#zM@J;t zBO~V8FBWqFo!M7Okpy)V{o5$*03c;aH!7E@*a}zpt%{$q`n>^<{8PqLp7@mfqz-Ti%)72OIy2c|6GGgvH0KVa(D6Naf(3Ke|-V z9TJ39$dS$0548mk6bmJJVvGXwXpS&3(h4ehroIYOMw}j;N(sKdw4Y3o;J?^7oI>iN zduaF*&&Q!TxC>sQ@Lm6V!<4x9+;{CYA|E_wX=@jNWTE$;v#g8IyP6aQj~!P1IH#9` z(mDhVCnfVrUzqbK-5%DG(7cAU$z?sxzw6JTyQ#I(PrEdyY#g;NAD68X6JDABeG|Zb z zsu{viTS8Mk*bgDiulTMxVxwU2lXK)J13diLUC8H-f96d|iP!PubV@rCiU;?&C2KZp zUoJ}AKN&SF&J`_*BHRFZpAqR11Q;a*tX8)KXCG1uVRqZ(WETe!x>MbZzIkX*m${Nz zXl=phFMY@N$5T*GK@r}_*I#KLyhHXoIA5+`Mg@UYbK|O?e)h&Ei+9}Q%}UJvvT<#n z-#^Z}zabr$gf@bPj<{uBZb&E%{l$>Ov-5G{mVzq>gm*5u7J|=43+`4p{*K36%i~ZR zN0gm7*q}crh=bBmOIxAo9z^R*xx~I$tHmE&B-AaWH46?U<2vUB*m# zPL&5Sh^&6nR6P_&E2A49gDQ^uTjm7KtPNjh z4!q(Y==;hkM_%7&2ybnATO$t%K=FUpfz!M`TWY)x)%pdCJDi}mLH9I}#d>DTn5NnGxjeGx!F|%`7OJUF4J1VB{1xw_lHlL zq=H1O_ue76o&+CS!<)B>@Hi4)a0Y#5oh}U@Nz!L0;?=w=ep%`nK59Mu`^_Ol_mcnl zRG>3jOY;<{l0CEAX=K&rB*MQWO~PCQnS?=89LSkj7k0xTeCD79P18hM_@%agBw0MN zk0JbLj9%^gq)~)DPHxCLU=oJ{V*{{+y0e-VA%!44Qm$EDQMS)!h#|22ew-Fs95ZxC zX~p}gUt=inteIv!BpE`V`s%*!sxOxIw5F71KtZ$ToeLG+T|IxXV#TZM;h!;Y$r_C1 z2xi|rkvO5E{Y>jI^z$lohtny~+)}Eb0kAgycI9#mD_YXy{{hmgO+TKM&jY?KilYsI z4N{I%3jpoH@2Qh`$P>4gdhk1#HZneW=HnN$R-c@Ke(sMzq<*T+g>RmzN^DXS{Yxmr{n?VjtN?A zb&PCmWM7Y(!u^P>OO{M#~Dk!>a0tIRUAR=7J=WDFtU!l+ZvSGuYSb_9%gseBZ`;!YE zahzON+o8llQ=22=>jFQB%fS_#X$9!~-u2vzDfu!ZdpGTHcm~~0fi~wLc5BM5_||Pq z%+7IDKrWFHdM;3xG1ya6($nyM@4Dl=|6|YT4gtOL3&P#ABG$gxjB9oJSmv`%9uGQ20KdLhU2_4Z6A<%Dl?>)Ug zW@0MHfPQ6a$~yP3(Rm`?8C94~S~`F5&w>SGAdxA)j$&&VC~^P{J1c30&c@FH53O5J z)n*#t6Z67!mzM?FN=|9Pbz8po$hu%mgPfCmEDSOd*Li#( zpD9sgY$ZMZ$F`PSo(H`+`scfwu|#fjnrMByRHpZ$BQ&w>JXt8xE1HN^E&?JZ(hy&> zHB4Vmse)G%2Oeu0IaS)StoZks(4*tNxEXB9z7*f5nRK_Y&xvBw1xhLaztY%kdW}Gv zRSswCL*r+Tphtj3m+T5jY(<*VH#4~Dj0a)7}^ZYH#76Nk6>g4SY#_`j$ zF0;sL``NNl{x^uydFOgifJ|O5VwkFtLKSJzVxZ6#^kMKsWkIb6TC@;wfnSf|tP04B zZ{U9y{DX?-t^|))uU7R0YzNf{rvH39i!Mw(z;pxo1$KQq->8ZQwDJ8UWq}uf%VR7I zEG8B2Q*~JK(yKqLHL?yiwwSQyT=K|*?oFp?Cm?Y!Gu9HMTcRM7kCb@Q$O(Il_0?nN z(wCQaoA8DywtV+^GH2Rih7Q%yDaX)-XNJ}-Q648$}`57RKE2z z-dG7Fe#sAFShvbdq|5N~?yJ8jj@!cV*0df(EtK1$8llF7a2xIcW!Rb0~Tk5cxr-;T|7cU+B_`KNy`&Uifuusv5oh7kb4W zA_^zc-3jU|gV$upTcv1?_#>`_!kGB!7YtJ}&Km7!HPC?-BI}b2%*KvTF{5W?IW51p zrOruQ+A#jL%+s`j+78uKM2V1Az8e8AOf`#89AZ`KIm?iP! zX>eO<3k>49|A}BV>j$okhTY|_$Y2bS#zh5s-C>RlbUuB5W$>Wpc<^uQ>Z&ZS!}niU%H7>|UBO1zPOo46gBtug_?yw3$1<$DQYMU-ADsQA zl1vH$q>QXiTG(#P#kt-z&tGCRlS#onwv>LMwq+*sVzo*xqK(`!>AEk+FWP%v0aGXI z;lewZW~klo>CwXnNew8)FrF_Btf3ZbR2JYLD_2M~>;BsGnMrPWbgXJlGOk}#M8~Zr zw;84QaxJehS(~B2RN0PYt>s`R|Idb%w?09X<-_ySsc?)pBWrmgw(BAOsxQcIbPVOa z57jPYT7Og<)Jo@Yf%#vkZfemBhH?^sxqbOEXgWjw9Z#V<;p1waBTYp>9#S!`C2C_L zKEQ|KyijUsw2+Kz+gJFUCp4jS8f6);0#j|H2+==h8R_6#_Qv6 zAT>!o#UeO)Bx`pp!VAw?I~D$Z!8SjnEeqteg&Zb19*Cq19rv(xWH3JG+<3WhcHg3e zuTlPJy1DH=eD{^S=cQzU#sgAxQ9BuV<31w3-UBMX%!^Si5AuH^n_Q)v@=6C+9{y4W zOje>ERu^S_oRx@ruqFpO4O;eu;kLI#BBy$DGFO4DQ|EQH?-la-jvSRDVmn!}IP)n6 zc>jQrK2@&&n81TC?8#SNo1mgnBMqLX?$Cy^KLQk#i2W3;j}oEUlHXTXQTr8X-wNxv zCXlyKVG z8suP!BX);t+-sakd$BMT`jpxg=b_Cy)$T@;oTcB+I<^oTlPEiyK>xan%e7-&u$KP8 znkrtA@?1G{0lQg%n{4>t)Ks!OAOw)-ev%wKovzu6{xf9WZzs%MS8GlhmmAa7u++7M zUzu;jYInF&+3DYDWc{h0{E$!@Bx+)PtvvDBeN|s47qr|t2UGNgY|U53P;XxbmBwO$ zLuK>NM%3f{YZ4U+ZXQj(fS|yehvrZgDxI@ve#sSDbYoTmBX)8PX36}1=a;4HD!L!| z+Wy=PBcYnm^$WVd!G~(hVnJw!qP5GzDEY7`^}(+-2Ne!GM*N}EJ5t9OeIoHgmW{Kf zHMl9U=7S<7_HAKAqggbS-4QC&E7d|nFBAS|3y5)|dk^e;7E1z(K5CNWJiX?WQ??U( z$j2NF{+dIRSKdMY&J}|6ym?av?_R&$OjRoDfxo3J8HPteVLga@NA^*Vlif4TQ-i@H z1L5)G`$^O$Siy)@JD&QWpVU_W%c9ag$7Rzw+*(TvjU#5MoEuAo`swFU8~XFPdc;gi z80|gF#i~XUU2>$&dEU%2OQ_(%dQO{c2j2+$5DJX7hV)B1jeF`m#;{3w`)REZWv2=H zfcaGsGmj}d?lu&V_i8b%Gvrd*_w~L}GN;y~o@yf~oo>56OhQb&w?;+Gr_rVwCC9x6 z;kMqb65f4G_9UTEdmpLr6a8## zIN=%|^+{2ZTJPDE%C2O$Zt%7K?H0lt^pC>E;oGRS$+#3?M|I*S=t}=-*6x-Wg<$Mx z!C0tb(oNm%zlv}EOv27I!+hv^hp@GC%$yA$G<#CL*>$9;zm zxir}T}9fPqe&u>Si^zQZ7UpjTtRRGnLMsJ!lBw4=Tyo&<>Wfiyg zAf81x=hshpb~Zc(y}*w8X~c_AM?A^TS2u>uK?0$#oahY6L5l>hNK@Yc*tpN?JWUS1 ze*xt^R)LexqeZPQBYi7$v|RrLTf9CILH6A#hg>w9q=Q{MZV|@sN*k_l+ zU20LL4I8lX?M<7i@rSAUMI$%WI(qw{P&Vv|x0W?zUsQncufl{e-w(y%3QC10PRD*< zI(a#q&QgQ10dm0TXtuLHeZO_2sZWZI1N5GM8-}g7jWL|(L5ig%I}rD!(pDsla!a?N zg=5)bc0=ejq7k|4U|CZ1t);v5@9*iAhb-cRyU4P$OtCuR*Q!nN-qzU{n=>=#=3rU{ zKD#e=J~*R375VsT90S<32Wg|&AV_Ttu>XGW?VHKArsrlr|Fo7lSx-nsOzHW`fB^K| z)V)ZUFgIGIBs9?sPy)8;F5t~jIbI(w{Sz>xK`kujT6i?unqZ~5n-(g zmdJ&M4aA%&wfi5)y6V^`t^hO24ID%$*zm)_Q%|qF?9Yedd{W{@nlgZS&A2yI?xi9E zt(+1uhMstCv{W#wXbFDUW2ZR37&6>wxHQS{3LuP$p4b3H=AExt^ysPxro^+h^S&eH zb#a30_V_2(YH=3hH-$lfg-PDS0^Uz|A%1zDpCMoUT=cpYf<%UzeeO~hgWnl3896mR zKADGfkM7W);5p2oDK%;Lm~JJ7JP5W-_N1goXC&JP` zM+Sb@?#leUJrU%>)Kc2$F}r0Tlk5~Dy*gX^@$6Qvh7KZDoob%`{ipR>7SwtJ3%xN; zR$PZ>Qx`nwd&0tU?bj*CYcmy4xO8_Fpme*2kX6JuC+jtnh7(^+^n^@TX`FUAiKG%XAEL#Ebdll+_)QD~?o$3ND? zS5Zbb`pqCZ+>3AL#;1F}@8glgi$#z(+wfE1`X_@t*qduGuvvYl!GoAcG#%|@y*Il= zPcbZ_6vKI{v#{5SC#c|QkGG<&2{(EaF*>@eZE6&$8a2UF7EVb} zU5Ma~4F#xZ?u#CzvdzVweJ8sS_^)dUlF10VEO~0Ew2DzMBHcuV60%D^Dg%_~)~)i| znEW_|mSSo&r;k7R-myHa`R5miGQs?a?>hsLonP^t^b=!%9pb|>t#~_D{$zIl3>8M+ z*CHXgH{RS3iYKiW*B1OWae|Q3SEcWXX6nUf8s$9Fq~*RS^E3~Wk9Q~G2L z#+5oSx}f~P@@4>JiMg4}0r5vhM|MC^w=+392XMbQ9+zA;SY}3N@3;88<&_O~M)c>AyN4XPui2RR-V0U(lt?jzCO-x$`EuC=;&@Lz zU zZ#luN{(8w*%GgQHB&nTx@)J1Aukh2h0W6D2lP53`uL_>D`3Bd47ItH}5BrAn)9O4t zukK=d5)UNf0Q|rV6P3e?@nAG@4}mBaEo`~4FR>+F7mm6D15bN5kBr^?$p%eHAh;B- z+)t{9%YtK#gD(HuxQQY`2?XxTN&?<2wxYhW@}kGm36uaT2QkUbMj95$*X;9Tr?m3800 zSHAz6pQ10b$T4uWO|knOHS5?N@~*;}zVRbGN|9j#QK7zbwQUL1Zwp?I@oZa)GIGD+ zDY3x5{$-54{%1`f0j=VyH!tpYUG~YLI9GW9Y4OMR=T>5m4v+#50maP8%(XrY+i zx0jj1q9&Z23*oq(E+2*k;gM@`>&B;lXD$aV-jA1=w5CUlmIU}!*At{V(X01=FRJw= zS24DmRwOG^c`EIA1{S}28iDa58cPuwF*cp{L79c z^2Q(ormVKDd`i*ZjWu(6&*XgHPtwFACo6(##yIHa35qB_KAt5}h3r0LuN=J-SxbtI zz#m)Z_cqorR@xpbbf)k4^uP!yd;RLi-xa!pof%C85%d*Kjp+|sQ4ZBpnWlZ_zVBj^ z{yxPIS@s4JBWo6FrOzCE4`)(_T{#eV6F$UCmDX1v;X-eus!U@UvSaD&YVdwa7e6>a ziz+q%QVhics3cN|0@(wi9M$91b9568qdf`1ttmcB7~uu!}NY@4;K=IEJ3 z0c+;}ASdX8&A$c%)fgYiH@psA(#lQ;1$;g}*I$dt=izaD{^DibC%AO^#kWSun>e&@yo|1Fyy5+n$_@p7_GK zr@R>3|7;#a&Y(Ll~hed}%guAwqB@7d5e`)iY z|BvQITOVxEm@H7U4MlQVe`7VGA~oO)^>Kq<{0rs`$gs5Y&pS@oav8MJg+k0bLUt6A zjRmqfd3Vx{E*`&gucP4A@RIT5`3A!L6NXf#XGy~_@Egja+S5|@S8Ai`y@^4TRGMm8 z2fluRW8rV&@w{K7>%t;C%wY50{%m3RHCxKuHfC~cy&i_xv!RpQ^a%LB-rY!1&$mr> zp&!e{H8lSCtc3iR>;w+rn^)!{KEa63z2Ax?q*GBgY#Y;bV{xJQ!7uI7--h6yuF=2P zyA81Bt#A~4o^{$Mo<>1iL0Z#^69WP8b*RfIfYYTr)*G@jI_*6MYj5^a&6yR3MmoL? zTVbI`*@P8PjJIWsmwKn6l%}^0Bf@_*SYKi$!;Ew-x3)v+3v4X&_3xtDgHV1gY`Rb| zjWH8lMI#I3`TXRn&;{YAqh$(T)4vt&)hz3a$C+^cB?14uj16jtt&$PI5T|Fk&zJwt zA%fnm((-VRgnUXXV{`$qafDRIvp~AzJVmQCzk&);BQ5Uy$o5SYSBgKpnJ&cLk)#D( z*cqwHO6-9A;3}yA!UvnyW;BE9)kX~pN;>ePgNy%LG(S3oeh0Hy##~pADg7t?(edRv zQYMpc*Be=5{c9G4a`c`!-p)ODNX>@so$eT zxsRvJ`TiS!2g;@eXsE;wC!WUpu#mQNpQU!;8-I+qu7Z#BDsvNri>GJf(w+*SMJ1?4 zhiPV(tn)LYgUp(CQEGZwB&ijPpnKZ|dMTF9jjoFD{-$|DeT=9NlJ1I-zlz=}TY1&_ zse$&cF#G8{Aux@QywXM3dRl5v;L1ue-jbmIIeE!hkIensCAQb&!4s<<0y1Tiv}LW; zwCC@$2u;LM)I5A*PScproq8nQ1iQB6Ump>&sti3M+v^xao$i3C}* zlO`37C(|A~`7FbyB8n+r!I@ScuQj9Nz-e}Vo;iw4hm2!vEAll2Vn~~`P``zv^7R^c zh}#N8WGDN_x5KEoxb!=9gU2*nqGozNQ9eL81B*BQp=!Go>u;2LNvT*IZ`6q?f z(YIb^bfp9Q460@yL>k=YF(Y=`PS)oPpzc^SkBMFN_XZ9^=uvBO8J#!ssBqe8K{j)1 z9RJ($k3-fNT(H3whOO&_GDS%&6IoyOJr=0BiX=g>c7 z85j&a5J#ea_afbuRBu&%?mMf)7TN4wElWh(!vc8>a{Jnc^o2ndrum5}ia_t(%skXL z$S(m$2N=HdH9{9Vx&PxnC2u4&_SA|%zwlRqV+S`QQ=*Oh85_kVweg-7*heyb4}3EP z1c^MZLhe4GS26CdyOj<{AvU3N_asibOqF(78t(%J^6hv(f`1k|6A(ux=2DB}E&4S4 zE@4h&z`>JSd^0deccskeD#6eZ3RCKLrHsXdJpwsZM4`y9SjZA{>Nk>H9x@k9Bv%vfXRrRXPNWZ7DG)A(^rfpju zeNGtDti9w$wAH0+(Z)5ffmJr7kV^}?)FM0LRvK{Mwc-i}_(8yj4Egi_i=$^;G;>8M zMHFH#LHJ7`g40$s=3F_BvNgn5eF{~W7d~oS_jvF!6P*}gpkbR^!ynC^8P-TN`=Q3v z`bpM#K^hi*4{y-aEx(62U*gB&o>)(woL8N%`di=)%tA*h$2(>y7keZlM?)P>cd7u~ zRfOc&&%9KeAzGbkowEuVG0Ze|!|L=a^@r=c07{MI4!;icSj?Te4g?3~EUo6-VE_G? z4NDH{$c;0@VHfe2-7(*{UzgZ?;!ZeO^IUU?`%vgrJzuUHhgY-C>1J!c7*QqmoL)(J z6jZ91a}?y+clXWR3CUuYuL03KMj~Z{uuU{%E9P9?Nt-<@Tp6fC?>@IuU@@uj@v&)~ zPP9;Oy(CYbzLw0hv@lOrQ}E$F7eWP6H*aZn=QpJ?ldIrgoa*Jb0EPCn2&bR^w zDMEzFXtta{w>q94Xh+{Ig8Mx(^`d%^AWe*kwk|y{w1~oojHV=zC9Z!oET*SZH8_iN zx}hKNN!EC@XG1{r$D9&}b%Zrc=3HQJ+dl3M^WtN<1?mx}~8Y zKIlC+$b+2yKyA>x*}Naug|74`A2|Fw&9ub|LB;NcbW@pzCAWy{pfL<{cY zJ3B0Wz~mFn5VUPPVhZ6+90p}F&gWXU1z>110&LcxAaUBM(^MCzqVd1~iax+stAG5Eh&a$9cA`K8u}`+d+0vPNbAocU zgzmbGuDb&sE)ODq1^Jd^Tiayl?rI30(bL9XdnmPC{c9VwkwSpRlE{UqwCmUz;ShVo z`lp+n9+B&swa>}f*aJS`^{brK=CN(94!4Wu>Sxm!j>k8wF)!t$u*fR8QMI^e)w*YU z{B5uy!CxA#`5pE|)xVbIu{BGG(&9`rJ>Rff<@a1AdP*I6o)UXn_LE#~0%by&UbS)| zUIVcid7k$+L;0E}R=dgLV&YJxW_X(OjZ+{!{UXp9G5!9YMi46^l=H%h(z@YTDp)^; zXl)A zf2-II;t3GGT<^My2Z1suok;5@%-W58~PH z+s4^6Sx)tLi0sl*$ls*od>8;I;;N;BveDQ0)0n@oonl6hUC_*}r%J7mChT#bP@%Sr z1P&a-`}sX%7DlLPrLaST{&0Sg;)#Kg-R@#2+*}y|doYAANVEpCcB4l&T`@~gkn*nT zx^@+4wVKGAc(gT>Q^PE^`oUs~@M)fVWL{pvmF0_Dbo~nCir0qdU+Y#eB^~fx==>2; zPDL}AK@7{;Vp46dp{dCmf1+-w_ZGoy4=cXUGrtKrH4QA<75OksY>^Q})^vsv-pOO9 zb!MN|mTv#q47;u?h1j8p;_t45`}!ZKe*_!)St`NL&2eg6^RRb+6^Ax!XkTxIIkJmw>t}nOs)_J^uutCE9l6Gz z5B*|X<)lgjIGX&fJkh{8)!;gf($?WdA>*KBr(tR$VY}@2n6N#NATI-(&qJ1=E z9#7pGm+9Mjlj=5{1#MvcM}O!dvR`X_i>+6JD8ddPc5kDGSrhC=gHP?vA7yV$dV*3R z~XV4Q}EZK4Bp+(~I*_H1_z1bh0AQ2^#2r<&d?ER#H(e)3u zI2Sf<$nj-r$>AP{vPgXnzFbN1Qm+c^z0aCa$vi3Zh?5N`_ZQQv`572u!JaGxA^ zR}PgYQuV6QYXDkLA!9KI)hu7c@F*dCO}a}QvvGj^30(qBQp8F{n8&Ql5aA`fvadi} zQcd7vCD6V8N4rz^x~3oM36bRZKLF-H8NY$Q(q0rk%_{Ub-mT?t>l4fFZv$g~1Q2$Q zpMzs$z$bkTgAdQ7wjgR*Fzye>$9|_ zsh{0S5o|LCPRJVTyiR$X*lTwx{H(0zVQav`@=9PX9XnI|#@TElOEZ8N6cl^=)YRdp#bq7b=wr*$XB* zr~{MvSnG(cN8U7Acjulo1DL~im3(_my5Kzm=;>D|zPBH)M{V`5)Dj{?8I=1}eg@j5 zl)>{8`^jxJzIY?}RZN;x=w;Z0Nt0dtpiP>~s^P5Qd`+`7@cpKZPVJzb-sK&SBa=&=Y)_e^*}QXGs;U?B5AidbOI~b3JG|RaLT<$DEgYj_lnX9e|nlCX%za zCQ_v5TGtP1&I`GDN{WNx0rHd~k3^W|seZoTiFZE&e;h9Tn5f=qlT%K3p)5{-OPrvV zh7NWPE=R-}dr>c(mz?2gGJ5F7M@h0KyM|YDyWbCD1du(5dpX86n-AJHwL0!RsQqZ` z69VG4_NVcwHrVfIsRU0UOZwSMCA)~99uM=_mq}xq0C3W)K@at<<=?k+e~r}T4M9)= zBT68~K$(UWKf>MODQj3lvQ|Y zEi-Z)DKAC`^}}*VdDa2HQvUT=82u909KC0n)&=EZyiQC(`qe=O8!HC&>C=D#-11p& z08d*wObn#g!uhwq=K9Uw#?5saU&AOMp|mxn`p$2uo3u=_r*hd-ZwE2a%kfjQEWFb# zO~LZU3fVTJpwMVz1vBKl2`rNS^O=4zW!u8^7}MOO|65FIM*N->gZAyxGTfBRW-w&%@#dY2~jke}C0)D_rwyn^qidkU)3O#8a@@ zh@Z~ydEcLwRB}z+{(H8ZwmlQ#Lozu373ateoa##MI z&j};1isv37cJ(lj<#~DDSBZU%Qi<@|$zQ3}W z0;i^h&pdN58S;SWbbaY{z^QpwN7K_lu8X}I+qF>MR371H!N7S8 zT!4GD(pHlfZae;^e}YoiwE!;b1`NrADOTqZ#~xPsw>WJ|H>Q7;rhhfZMQNYu7@J;) z`m$tT`WTZYouTLLiziL`eCeUSxpac-VINoZ(J2?hiy*eXH{~yQJ{d;wZyI(fo#Xj3 z@*DB5b*$IK1+J0n-(3LD?;-=C!a$V{M-Cw(F6C)_gr^=!@ZkoFT#x{JlD-}xT)>(i z%K~x>Y0kqSla%~q>|+BcRvhbM>k=Vk2NL#F7w=!)2w(GZ^VPj$$$n%A<#MLwox zkHKkJ?t%Q9ETFO=@#ivf9SwO~+*JSQ`EdDLxVYq+-*=Zsm7%mLFJF$MT}dL%`tR>N z`|I-Sm^A4OO%LFtJ57hV zJ_cFZ2c9kefM3nbS&r(dju z$RU2s##tJVEu7cnv3y;bG(RirFxA(|5g5Z>wvd4(p?0akbFWq^Ten$8{WzH@3{W?Z zsKCGe5$pB>j7ai+8YolxRd=8HH-=kyR#AILfF>_!l$JMIh@3cv1-%0BdP4`69=&hF zTp|cX--J81YSzK~?%R)X64DuMe5==XdPnuUzvf@z^jm1RmMc79mP?QAs$A@SIzwLG zED3wA`h%p4{Iz*RM88geLdUXcm%PeBBBPd-7?ah@v;}0AzW<-E&6limEVEl$+LfJ9{V!sdYT@P`T8IX;1hZM5Nz@-~0)wh&uUviBzmRK-dIr-Qk%AxoDVpX}b#Ax7Dp3gobl;9o z&z%}c+GYFnWtXFKS+vJBD5jy`pp3;hmQT{QJpOf(R(^VUbCcmZus_&ncTM^fEJfL9 zYbPMRo%(+wIKA6z+ozGcY1juW*s0J5ay~0;K$&`Q{dc0|wq5jSy0m%(7=0%a+Rh~D z#`Xg*K$I2XgxQH_tEYkOeqH9YVJBW*-+1(huYDnI!!7rBf_VBkNB>UarO!`dMe37S ziP|{Gy~|zAcZ1wc5}(9s-4UQ#>&@r#b6+><(MY(evI@%XxsXOh12M?_PdLm~2SDIm+`lw27tcDzmSq zdYtWDd~&bMd!^siej1UW03(3JbBT@oy@SU~;&4OS5R&pPGRH8$BHDB#j>>7;uFks+NghN;mgSaq!FFYb zB|TZU$n`p;>CvSv?KK&PSlKrveq#Ikfl;JK#^4#kOJt^Kn;u*ow)g0cwsIDtX*mw% zFY%S`S`#!hykjnyZ6SiBEh2T@DG=52Da;(1>$>-I-G)nkt5hIim)rVNp+_V}(?UeD z*(=jjxW(7J*z8xA9{RowB2`)?!N0qYHJnn^2N5+%eJ3K-Nm}0mJ^mvk=U16+*6QWX zHhz>~gQe^LobP>-KjJUzxwdV@W;a16KAVi~(Z#!AnseO1=BUPIS$`rNkvePa-YY1%Pmt1y6eqOlWE z(`=tP>j>Yyl|F4ZR&P#33uUaPrGaGZyC(h1Br2JFKp7Dyvg-Re;+0-z4J&z(pyK}i z39<1-4kVRGJO*Ji@T0k1k?g9VugBCi`bK>*N!O!DgkolW{eZYkK9fQ83=_LzM_f7uRc$sw_^D1cY+tk19$|VEQU?6L$CxN>xCG3Bi{oUKB z+1k&)_2_@<+d>fc00|)RT;c9#?JL{O?d3F(E(uORzNO+o*M?NfgUuNDLe?cQ$>(gg z0n205CeANPCJVF9rgtK5MICHmXF1@b93A_b>@SEyup1*Vl^!3+3ig@Vg5t5xc9}%k z0{L;kblK1;=_8A7ByF6tOp9QMg3*WZ0;(*0NcK8bB>Lmt}M zeV!ecFeYJ9@E!*Y3s>;kk>T3;u>c+2>QqeQN+y8@{X?M+dwRbGxGg$cKMw8i`qvi0 zyx`G^3qOea<0T=8=LP#~U%s~Oec!dL)$@DW?yzFl3Xi;bVZ-#WcbBIJcEkZv%<6n* zAoCtT9X?Vm>c85zYd*PBUT!E~$t(4C(wK?5EcE64H|XuKPi{Xdz7?ZAeXHrkzk!@b z?IN)kR4v)hhdeE0gP)(1NnWa-MjLkWHcE|m0D|s5eX2-0#EGMtmG+BFlsh8$JoUps zdXcCN`?{^UuHGK4tz(-U_q8gY_IgUJho)_}PVxE&lAB*jjXegt2-=T76so==-8LJP zy|UBGoOvJU3U#fn|Lvan`srKxYeEqB1S5dNbA!8w^7?j@yu8Y{4V(@nYZoL!&~M_` zh>qW3)1QmYzqk$bfeeNGZXf19f*sgaWw)8AW;+$qU_c9HRyuW|v)UgcpIpUaO3Qs& zO$}G&rs&cQdcEwYx0$%VAtE-Bw*G1k>t(PnV|zlHGD0l zy8cI3GMN@k`1HESqGydoGB*BVDZVsY;NB&WWnx<@Xzp;sckFCw$I>!ENHf_K0 zaGU-Wf_Mzva2qFxr+{a~~IiJyk@ z)2Gffy;wMuhp1YL8jXK(N>fH8bFeNbJ61qPl{)I1{5NW-DT>u~3`vJCN%k_SUZUB9 z(utOa=q>7!)EBc~p+1srLGlkyKfL~-{dyf`OvU@Fg;G>6)>{_WHIUq?4>dj5exaO3 z`P)CQJ^B_`{t}M|MgWQD0vq}JrM|!X`7SegtMUZ72j@}VN~heQQxD46J@Q*o{#F}g zQT`e^I+B|Q$ZNWkc;+ zNuHHrLMD|};V7qysM%aZDw_>5h5Ff?cN$%!HqQz@<%uz{mvy~H>a5uJge!7zuu2h* zWxgyM&vhGAj(uLiJ|pMX!k~ui$~l6A1V-AcQ7lC4CNzUt`^n zbR~UNU00n+^P>+TDlGFhN*<w>kerB-#x=-F#gPL_wlF7)4d`v zT&T0x(ECM{@6&*ND>>=~dBoyNnGGX-SS|F!82GI}2MDCA?Uc>ic}6?weB~yPp(JP)d?o3JO8U;3wps<>M{rU?dJ@(PO3%H zbCptF{}+Ev*MPw^_sQ#Jnsj!8??fN!iFx4i?{&rN-?}~#SziAe-g@wR`rm{gJ_JYr ziD!ztpS7RcZfGwn-i=M*eF-ux_PA`3I7lQT8ETOLb(v0jES3$VEe>D-mIzZPaF&S- z$eJQZKz_o=1LstSjTQ&OAXmVKV82C@h37Qs!NDjG;z6fGonf%YHp%&tKhWnLxi289 zzK~^NUGdNUrkodrI6>*rJwuW=2I07xc+@YOuy-eX*>XFUY`S`xoe;pg1KV~G0tFdB zX;Q!RmkB$`ZpU~YBY~}s7V0IFE|=+kGMC}g%a+Km4tWOtF)WKd!|Oo@S+nW-7jR;; z4z7PBgBa2DVhU|5NIXZo?^;{gun1>;{VS5Q>iV~6hrhf!UH_J@f5q!xM8c1{-aj7+ zU;9FQc0PK z5AJs|-fcGqdJV!xxv92jlL1)?WI@wgLU8&MqJ%DTd?nYWI!W^h)>6Z76a_t_PJ_H6 zfx)I)b#r{q&W%}I|2i9c2nGAcjJ1VDEG`bBl1JCSlVD8?cTkSkYLz5sxm8rUXSq6o@~+g$p!ou&|PN3nnHX(`%izBSNseQ)IZLu+3u26662ks|Vg9KJ&inv#KGJx0( zlGSws*}@2Klh-4c@xpU=?D_6AkYGjm0?|hA^D(l!mohXL+COeDJDXd-@$mQb4Izjp zfKLcPJPT~mKYJ)&x|R(|g-A_sDpdK7$cim=S8_F#TamGq+$`uYAIQq`rO=aQbwX4M z(Cac*KEvXr48Fws>x3U!~7&``mW!_qM_LA*`Tnr&Pv+`i5c*M(2LQ z+=fmaa)c+Y0v%>{a-fY#T(;>E1xf;3NUNx` zKVASbbi`5j9~B0+&mG(HQSj%YT_E)Oh7iOP0waLLGr>9fH;v#n|H8+8UF=uvA)K?g zf7w8~CH?t%I{!-|ZKdAkbX^%}KEMUplSqqp<}zL6M0S!cSDzSEmR%^kjCw|Zb z;NUj--C}kD0u<5#-LC3+LQ97Db6ENByc+liN3;g&npb{?&&Zhs|7fz?pFLBB$Re05 z5}zOJ{^(oGXvs&NAVL&O;h*W{%dM{FMAN)ElGmaSTAut}TE%Db`g497vW$asgcGBk zW>dEuO&rhJbp1npyKMrtN{un)49`PKd&N!jxuw4E3tK#jdXf>fwL#|bo*1 ztgip)?ja|4-%z*KkKf~KUx+6O5uDk?e%Q|A0GI|tFV_d; z=?>gw_JK?z2@1MoVr(a3}XLCb^> z$yz3hu3rkfbDc!$=L(aphPtzVB({%7G^@HnesAN%d@gnVjO;6e2O${cK)ehhv6F{= z-;liaOqQk%HNWf5VlXzelSm+}?c7)iY-1X+==UZ=|9IYPr-q|ROvG?%(E~%V&{w2}Zsr*=ZEW`a!Uz_^B&4lhTu769{zrnd(rb3q(Q{(XmK=-x!zNY><2)0Od z{o^|nt@Rhfaysnm|Ee5a|6AI_JNXGAh$jdVK;o(6r1F(1f+K>zs>3!DF}(5TL1{He z4JAh>G1)_J5LBv{_Jg$+w0hj}#VvRPhL_iW=T9rvd}G!HzGzw(vKsdPzEhko3E zWWPU|uSrL@F%OI=OQAkUtU{C~mA$0DwEg{Ph}y)y0W!UB^p_Y5JRf&*@-^y~WVW=O zk0ufWb+GCO2avW-A_VrGa4EVV5+6-{BD{!M1xRYEm-TkF@lHRy_AK?yOC;4o)w{h@ znQnuHCmI*BC0zfuxcjle^Pxe)id4EEB#wGHzbtICA}x$wg&u=^x9CBH2%63Maipy5 zo8(F1FIn4lsl$0O$fx7D8`}L8ZRzov-bY$E52qW$Gi!Y-eF{;c!KwdDUnj|KzvPiY zCcCM~7ZsXFhkmz1(lrI<^!)wUKwoJu7^X7H_Q>KOn0;y$ZGv)Fum4W6Pdf>0=X`ow zJE`p?O{V83t+@WNZnnJs8_D*1?h5l_k5GRv2i3Azwf;WAarxw^BGlo$@Z-@-eD;rc z@*n{uo*rJam(S6^)oCPkNGviLLvn&?nIPn{S&zs}GO9e7hS4F^Q|)IvD*N#KH5r-U zOr*zRIubN2Cky$gC+M?Uk0d*8(NpQHjxE{J&mXmA6ix^DhdAg0_5V6Bo zd-%u>Q?CM%trGOHN8tnT) zAZ0e^31r1;VjwmXA%Sw0tU`nokpn+QJEhQ5<&|W+h?LP77*IkPDUMZ+NzxEni%F%2b58taEXG>Mx(({=OfAnqxZiQZ%*E{$k~xcJje|kPdhe zu@xNx+uf&ITWQUm3Co%1(Uoof&&j7tofNfeDUc+19gSigfDCqG6#8g>wojnx6fa%S z1@&)y2fCmY_XCwMRf~P06JKq0&?K)@OdzL7z6A3(qKkx5kp#lDv*mkKAn+1MC{%Y4 zR1Gd1FVeO_sJqYo(Sl9F`wxGguYDmt8jt`IPY37MzKHxhk{d@HTq4QPv7e(G6OIT7 zFhPuTVDwOvErEoYOc9%kv`oa!B8kMhfiL8e$30cS=jF+NA<+n!~Wlx zTJ^}9SooBi%dl)0kP;^YF`s3!wCEFKF^jfu1~;3Kcyx_!e^&<6w1V#=6d;x|lR@m$ zDiWSa)Y*UIQ+W&Ya?p-C40oN?%Hq^Xr|Tb|6ZF=)kTVgCZi);tY|uY1fl0qy=Ig&t zMPr$fF8;g0FF6(PKh&Vz_x2wWCwW~6;v)hHAn{btU;Co@1duB4xORCy0O_3H^8l;MkshCZn+nfFHays_GOaj9dth46?dyXa%9?Dq!WWkGNNj_W zyh$4TS8bB?OnwCUnK1S`W51X_`==v)YHN^Xz)mc+F%UJ;Pi~tZa$7YKRzp7^oM@`A zDAkIbHk*A)(BgEddX#Dx+6j>5YarO%@*qJGnA&vnOhSYS$)rlCS@<+sZhz}#E%Zl2 zl4kIdXDfUqHh+(|lg|(hlX8nc8noLB5!cIEjsEC5%nJ#h6hI{t149Z*O*GX8Er3)R|o@@4YTf~a=p?dNirsuMiPk<+Rm9FVo*@*dV zp|iq~U0nx~#?Tgp&Li1n`a_YI{{6OnFxoEHDWE?)){g|DM(L{@?MxKe2}bm3XgU!m zCE>--lW)&??p%Lt&l~!=*Jaonnmrpoc_MW;AcXN_a`kxQFT^gceLBF!bDb-j^QgWeY1xONjUW%|u_FJfUR9lKQ9sXba1KXFnd?-c(j9F4 z#5UXZL(ruC87vcwbnV2VQq>3gyFgg*U2{Duv`>u!u|b&%vO*WlZ4B3h>}1Amb(79I zPs2hT4l}%-oX9qNTV4Hf3_dTWI3>B#Y>+o>zpfh#UPw=ic4GaS-ErZ}DZD6pOl3D8 zgg&NW$`vn_uCtd>XanmywfheukOuKpzy3$fHIUWOMs89spM0!%qk%s97Rev+QG*1K z_~`M=`tEi&eybXQ14*;FsHLq)J&0?OR~PA$%IJYiN&9-BZ)N*RX0Cr_zb)itJF0r* z`d#zGk*%2!V!EdNl~3_c3LR3Mw<~sM+iYQ*$-139-)H3fm5|H3`fzG74eW|jxUJu6 zm(z(@%a6~hg{p##@GO{5Yj*h>%tV3{9HWVm=^&s^+RUw%Fty(I1&*D>NnH4X^-vj( z?Sx79SK(Z`K=lJe#}s$>&+g(xFoQpaABUe!kU;me?%Qt5NVlJ7X5oe2;w6K2_W%QaQX|E1t1^v<4hVHi%~k0 z36*2QfF?812bw1A z(EAIQ_bFLT*S`hAbrO%fLcXvH+V!7geg~llw!KP}A%RJnleYe!6GTbv4%hz(RNC_T zAJNt^-K*F?#A4gDYp>^fp9?>Trv(x~;;G^Ez4F!b4bBqj$pbuwO~TZcj)74%<`X0| zi-8{(lvL*fae*xkih(r3IhY~}!~_S5sxBfkK}2#^*^49#Ng$p-B2jrC^`kvukhkcE z(g#xe)}U@UlB3_;FOtY>W?>Th1=ba11l^MCmbzZO-1)UI7N7MBuXNG2nzY#$KdsiL z4dJ-^vrq8_vf@*JsU5+W`>siNE-ut_9Pfl{^vPgbJLk_K`n48q57D(|!|scdSm>n~ zqKp>8EDf?I1!*g6cQPt-`O419mRyev13e|chLvBcBBdTlbRguj zxVV&mFkTCDk!wymv|;W5a=?&Uow;2 zm^;XtZII9wp>Je=JQBY4g?PH)6fp7Bv5hXj(0)Ms-wG8G!EOIj*cV7!5s;joZOM7_ z{)(vh)@D6DJ&ZyHQ|SYS*U65_E&k>DS6Gp*Fm1cgBXZnccI7yyt?bQy%6V2KHTzp+ zw)e;{?vwA?wx1cc!07KU`t|8!anj^%=OpSW&zQWSkM0CV0?@+ zK7%JfFx?&?viQ88f~=t{wX^pnOXuJk>Pe~1FVR4sGCjE%%ppiX`}Uw8jK@U{jz_;Y zC}*e!HD*HJj2h27>e8K6AMR1g;WC4MqoWVlXutO#ihNZF;wgg!ka#9I{kgnu@LCv* zH0%lEW;~6GB7wZAL{hRMmAG#ODHAIQg3SaX4A@|E-tXHnO3lOx^P-^@QE`80%RI_EqzTkjU;r-kNRi%cMq4eVRX#_5OR}jV2-%h{E3|7Nud0Xs=JwAYhISi^3z8#y zbno&-kVaq{Yv@s`9#jg^w&s^kCY>ym{Sc~wc|>B~ewex}rspQu>juvXw!(Qa1r{6& z9l9KCw$01sIgup+tMXOlL}X3GVE>3HtuXHBwUA2Y zR922{ugGW^eI=1msqIF6BC~(A&=XjJjJjshR}hoKx>oMWcCG4A*?*+R3R`p`tMbw1 z_z!myc%=K1Zm^oQEq~BCPgmBXYueLw(b*>Qmlh~^Ms36rh>onq#{Ohid|#~gm1Ora zeN}e%(m6rFs7Q!YoelG($ePHaf5!zEIfz}_qH^3OpyTK^VXiPQ+-d#ek;-TJ>>u&0 zz$swjnPR&)e!1@}{G~i$2hXoa$BO9We3^ux{-qsRhe?>Gv?LGh%rd0Ni~9O>W*%J8 z7i~}szK{c5R-DgzDxd3to|W%cKEwT$JX^@HB)>Xek-Xg2Ro=3%eE)X*x1pUal8b5E zpFJ}#Grou+J@VFUupk$l*cUEn@##91f^>imF%hsUwg=eU2)|a>AIc7G ztHb_Q&!DTF?RH=OQ>@R()BoM;WL`h~X0O1$p^Z))VG6s|C3YJV{0?$i&nf!8rv)PJ z^&DATuKRT8{2Iw0@hqW25YHG}6!4v`Bfc62-G)p^RBDovf2o_SiC)lML=L`S+O4Ici)S| z$kv1H*Ydk^c`c0XBu>s#i)kLUe>-cp1bfYVxEQ#Q=UD& za*wyajrvHcU*4BNUc)nf_*g_}9}PrJ%XZahgGtEWbsO|aMc-h%puKI|`QrRIh6)nB zV55k{_bbNf_gw_ElY#u?v$Kjne)JuAMZQe}NIW|*0!Tb_SdRk6!E_8neLzm-`mc2y zs4ssb8W76%zpe+z)G+Wb{<FiOD(Yy)diNER+y}<1Q?|d84Zi`| z5tP&SLtD0bT)tLf!=8NY_B5}*jL4y36meWP3eN^kT?6EdYwzUW^~KfGnzoaD25khs z9GBUix4-TuKYOXIAB^i?MSQh$kEV+MwtJK0k9gJ~0VJM1e))1Ed;4YGJFSG_cL`Xm4|!CE1t<_#oS&Z!)=* zWRK;1SdVO*%>Jwhz$ByaE7m{wN2AX0JYupH^{K`Dfk+nR%tSQzneFfNneCrXx@-m6 z`2M&H&FW+Z+CF^#3;LAyX-yzN8vGrJ*Ql2`x#>F5ht~5!9*@#NKJ|WNC1iF0;g}wSGV5iuR;KR;J>KFW+H*aC=iuQwzMWl z7H{A|=A^114t}iB4j8;{+?yGR zpY4kxuy1I%tg+7&`~3yWPDtnLe?(Gy8S(az>iX~P;imU*A)f>zvQ}LGU5`RNusvQE zf_M%<0!Ta`cw0X>J(4%z#(Dvg8y|@JAS+>P@%(tRwLDlRxsv3l%=xPQUI+B9M`nQc?DpS!fqQgdv2Bvz$7k+EMn8^G{L2B5G4jJ#_3v%Y~_Fhg&oevkFxK{8- zcUF%_hIUH6ci))}lCIDs-hQL5_UNH}j?exP&kGm{ zOsZ)?7}oH@`@~cZqY|a za7WtMe;{H zPapv#o-h2ezPtVVrvF+O5%}efH{LMfo5jH-6QsO=z^Afgbn=w?SwGj$WdEy1mxAB?nL3*)?G&wHD4Fsc=TxexFv|^0VIILbBELalh?P~ z==|pTG^V31+58l(F<) zAB$r5yXhoir`L2Z(x$=*Q~#11+Uxvs=-=1|`iJB9MkilMw!hv*WUYG$9_6|TIXl=h zeH&NSU3b{nzK@&pcB0wHC4Ry!+tTfr7M|RKuEz;y^7Bfb>wCQGKi7RHetQ8euC>ay zlVSeDPMpN%_W#@vGZZu*sX}-D$jr!NMQ|k`DaCVu}JYsj&43 zhVn9@Ndp&(p3KIPG!qq_O+zv;00auKYj1^&yNM}7Kju?2Iu$3wLBnmH}N#g&=GC&^CIDWfv(dm zH8)IGUg``}q8EZUrayahZ9fn1Geoji^s}DNU(_s8*Ab>p-5y-D(bL4lpQuaG+t~{S z_3Hid1lL&82R^V~_uQYlpV9Z8UeraSCEZqkC63p1?`!XK>X&$4K>|oTw>UkJ*UvZ5 z^L{26J#9r?s&iJW38cXac`KP%J|h!Rkwi8u%CiIA*@l(QtV0(zRq|w!_b3nQyd_O! zCR-KBl5|dF?T<_bvp=m!)1pi+KbV}Xv7I}ezY+ZXE_{3nPGC0QW-`&zkhuBFi&MuL z1Pjt~hw*YlCN6Lgw5977AT9yya@C8PyTir)FBz}c|ofyY+lIp2}xTd;#`d+TDTK+Ppeu?K5B!I;8i?{WI z?S}dj+s!n*AUXr1D+b4zY*cUp0HiX@oOH~C?|hu(=X@1;smgkhR7bQq*k|cDBi9qk zAJsA2Xt3{O7j$R)a-I75rI`nfhHbVY=2~oX+qw;v9}8KR^HTh<_>pl4(J&`KBctqb zAs~H7_|P4`56`m+HdlHku9s;(nO@#p8V?y%;lHisgaRq$GH1vyUnSl9+5k z;9`@oC zPM)4Bl2pjbgh^i#X|gmSVAbB5gkW1#deJAkFu;>E9)~UH&_Cb$=)W7qHNIT9S|~C0 z!C6@LEdONVWydY6CLx}V<}1n;$qi)9{;^^<`3I&&r|ZUwzL0GRE^Iob$?Kn`b35TY z+SrfrlEnJAV}X2@oU7jG2uCR^>s`pZc419CEs}sqR<#vb*Wp^7DtmJNsvax5SLC)L zUXsd)9FS_6>z?gh%31Y^Txg*~=oc_-C&wn2)XBWkH)#mvwd7Ru>C?DNrZKbLJ z;W$7m(@Ff0d8KSYv}PaVNZBasbqhZrQrT3;a`i zgla#dvcF;v)mD?7iWuGpD>7wA`K=z2B@yDDmfKE?vL-Y63$kUddrk|P(|JpMCHvXx z;z5oTdF`_jUJjk7upx?vwqC^Oh?a$wzs<+{DqL-E)icPyfbu0(Oz7Xp7nO?4YD}ac`DW_C5dZhtZ~| zaju`Y*payCgLq*;0!X|#I4=r$2}s}-;DDcrL?LA)SPA&3_ZKV_fae!0A}?S1NeXk!p@1oCmEm-lCy zba4)*-KHt6{Ja?s%#~f&?5OO`k)-OmyiO=^>7^d&Ij9rn3;K%u=(|epk&Kl;G5?W$ zN9PY^`#=4JIK#M)j(o1~>-ky0KZPkq8|BI=9fx9WaD>i#~UNrRg{Fi;ZaVi*O zPE)GQzM@xoy}Sp8vXHZ=Q(?vxJA2ty!!)(JliDo1<(;OLZG3U$#_RvGa@lNccU3n? zd;Q_Jx#)v2e@} zut`fh1Idf0+gh!M1X8|EB(faLAEHn)pSyNJu5`;Pttwlj1-Wv?mX#i;gQaYGRDR(X zsmjV+k8r%Q|JL@+b;#|4gjCi((*L~u{lUl!wvK3=gz3`}tBTI+^eL~{4NaG11$}#Q z(bBou4)9G+&s&gl*c3;&$SPLkPCk(s)ssewC)>xh*6X{cb{n-3L$nXdXj&C~bR7k| zY$Jc)A^9U-OfUjSytp{OBT(fFc8&z5s7xPWJ2D~Y(HM--tOiI)$qMCjKm!J{Koa_~ z+g8Y`)K?r&K(-|Vt6)dA8~?PBD^}+fur=!tiRDnPrt%gE(M0~RTpo+7rqOJh6{OKp z8|gw`>PM5TROv-mk<;f#-Xa<{J5vP&QqkSq65Vcs7Kx|@kZUm4|lIvqdS+p;Z zP93CYmotA|BVS@}rCD+n)JbrPx%k~+xZ>En{uc?|Mj6q&E~7u!=RVPV3+Vl>KWlmA z`bWE3B$DKhc%eZ8NW9oMlfX~NE8E@u{qtcJjxd=CK_(Vn;2=qh{Y-SE&?ALim5r62 zoPQ-hle{W~ViJj!9>~VLSs&^;s&kcA*}IY>MHyY#dgLS2)ARe_e?wVYq@fR|HvQzb z{hS~n+4IAv%bfIylTED@_cE7hN0Eu-c-~I5hK{(>9}D;hR>0!107*3@ zV;ak~6kjNjr;+gohl)&}ze9)Ov~?hz;>0cb7wVuG1;mE3F`e8S(dve_pl|H_BFP`| zqC9WXMl{uqYaFGe!(FJDmco*P(%4OTG z*>ohQ`^As%DQoGc`+v$$=bw37O9vU3u47dPsoy~tbWg;&3Inh%9xT2{xsYOmX*YR(|Fn9{<)`SoX8I5 zWwQzpS9j=~atz=$t|P23u{5?35JwsnLWJ1qONYnXy!A`7Iu4^{vC_W|oT7>jBZ8X^ zvqQ$}Exu&Qg~OjN6Ktl`K#1tA%&V`&5Z1(tbH5|^?~xK+3>~=Guu2!0DtrHVP>ed` zpMjTf8HTKZ8s`Sil=vAt;y(9i0rq)W&A%i{+k%WQZe}R#WpnW?O ziqjb(p7^z=*fxD8I~hCZX?HPX`lPB|h`8R5@6-0L52l;01fe;=~EXjUsssf%J2xu%?UX9A>R0 zK&e=!|ARq0gzw|(I?{Rk1Kp?a8_KjiY-DWh9~UnR?z4m1eQU%pl#wVC5eO#CtbtpT);HRigu@Z| z^6CsG6UcFnmQv`UabP$1vj-vL!@*W>A}-Wm;sI-qgV+Y!yUy-;;bR*wYI--t*(myI zgTs1|JkZpO_4-oIiqUYWDaOM@QG`3n2uGYx0qsv0@6t}77_$ugjdu5Wh} znfnPm`#7PVk3t;C90)Hiz6p1wwex#Z4X*(EsFXK|c3jA2Y3fDkCb_*#5}ubwsI2CbF|{J!pG5w{`rL-&+1 z#p1Ts?Wh0}H4uUBoZ9o`t`n(WeAZlbk-mP%Fai@X{s(t-(!gSUAKa()%j1XY8bjW+ zNuRDR&rs={O4}#7*E^S-fe3)qTTg1`4|xBQAm?R{_zzMpaxI>S<&O@l%LmU|c6@yM zA_EGZkfI7TbiYZtSNYjHtXzvh-}z14{C!1p0^~JOLTS8{cLEyT9#PVUGs(wLW-!Hm z_lm3!0*d*+otmps@I2G_%tj-1DhCw)+W*gXja$Zua|UlrveCvMpxOu8h`f?0SYm z?NhCB@S5PIm^X7`F>8_E!UAv79p-zj|MD2$nEsG3Jx^NKBUrSkJbP)@GvHl(+K})7 zEmltf@H)7h!FMG#Ph9q&Jlx!q|7v9!TQyiaGOa*g_uTW!itZyZsR^60zdl@@VcK25 z&_IBXEj2DPQ4TUQqhO-n`I$mhz%pfXWJi*S>sIFe8wxx{|U#bBR_6 z6e_^aezVWaflF)9UObd{IW?m>Pb15gf|=dpA)O>_*CEvjJY3y{3Qpft|Day2 zX&m!vq1ZACUE1G%Klg9CX*FEjQ&Tm&tBvYt4j2uRuRFqL)xc~bNSL1V9`juj?`sy^ zd#wM8|2SF_wK)u(ofMoEkN=}~oKMCmOb+x%yVa&?&3-Xx?#FUY*C%3(nHJEbq8G8t zQnw{3*s_Cn!+xNrd&g**e#0b&Q_E|(K7T%^b30}gg6&zm&Bq{*`tsO;gX=b={8Vjj zwtoMK4IH~Ss8vcwy!0L7nL9SizOW^W`S;wtikSJP`33W7(scY~y*jpRfzD~uyb?uw zBHSe%)qir4N_kiPFiNm-1Pwe9WisoZsDVRpB1n&3J{%Zr*ALwNELHXe?e<~(*qPTO{kK&&3>2&n z68%QbUPmG4vqs*7ifbHFkWRDM+BH@gzNqomF}OQFT^oQeKUN=7uU}nxpg2C~CXFE4 z>XxNHSdeir5zQr;LKY-QYOlx|i*LeK(Jfr-H>c+Cqm_2TxPWDHwR&+;SgavZI+lr|-Z-i-SZV=UAo zBKH?}Fc3NHKFdbg(UyS^69&W;LT+OV6%v_Q_>X;P8?QycNST3PCGXd`ng9qPyWVc! zGi&huV>fJ^_ioGY>)P^nT7$Z8fw{r>*HlqolR_@}ohkL{*vc$;SM{gV6LEq0vM5(7|2@@or2-d_Ru zYLxriw(#HEW?uoN;LegqWuQiZGOt&{RPBGf2(4(4Rmkm*oy)YjiULNT-bUDVAgUQN zqtFhv4|BJ{rOlc~<@9oTn6CC~-pA!8H7%tdmy=Bd|x7X;?3==;6e zYuzs49%fbs5r{gSV&6MAdX%$D08US}^K>na(Z}j>Q9#@oUNBf33ut#auomuK-M#qo z4#c8(1hH?iZH&zDSHe(ppl*g$CB%@NI#HxH`H&ECBDXOT|7nY;*b^!dmw%O0Q=K#j@4t%>KJfn7UDMg hZ~mvi|51S}EcDqjt7#i2-n&OQ18Qb%T4(GL|39BG%qIW< diff --git a/vscode-extension/package.json b/vscode-extension/package.json deleted file mode 100644 index a62b177..0000000 --- a/vscode-extension/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "sunhat-vscode-extension", - "displayName": "Sunhat VSCode Extension", - "description": "The essential VS Code extension pack for Web3 developers using Sunhat. Streamline your smart contract development, testing, and deployment lifecycle with this all-in-one toolkit.", - "version": "0.2.0", - "keywords": [ - "hardhat", - "contract test", - "solidity snippets", - "solidity", - "snippets", - "smart contract", - "smart contracts", - "blockchain", - "sunhat", - "tron network" - ], - "icon": "images/logo.png", - "publisher": "sunai", - "repository": { - "type": "git", - "url": "https://github.com/sun-protocol/sunhat" - }, - "engines": { - "vscode": "^1.70.0" - }, - "categories": [ - "Linters", - "Programming Languages", - "Extension Packs" - ], - "extensionPack": [ - "maratib.solidity-snippets", - "maratib.hardhat-test-snippets", - "NomicFoundation.hardhat-solidity", - "tintinweb.vscode-vyper", - "hbenl.vscode-mocha-test-adapter" - ], - "activationEvents": [ - "onLanguage:solidity", - "onLanguage:vyper" - ], - "main": "./out/extension.js", - "scripts": { - "vscode:prepublish": "npm run compile", - "compile": "tsc", - "watch": "tsc -w", - "pretest": "npm run compile && npm run lint", - "lint": "eslint src --ext ts" - }, - "dependencies": { - "@types/vscode": "^1.106.1" - }, - "devDependencies": { - "eslint": "^8.57.0" - } -} diff --git a/vscode-extension/src/extension.ts b/vscode-extension/src/extension.ts deleted file mode 100644 index da3e421..0000000 --- a/vscode-extension/src/extension.ts +++ /dev/null @@ -1,259 +0,0 @@ -import * as vscode from 'vscode'; -import * as fs from 'fs'; -import * as path from 'path'; - -interface AuditIssue { - severity: 'HIGH' | 'MEDIUM' | 'LOW' | 'INFO'; - filePath: string; - lineNumber: number; - message: string; - detailedDescription: string; - suggestion: string; -} - -const diagnosticCollection = - vscode.languages.createDiagnosticCollection('SunhatAuditor'); -const compilationDiagnosticCollection = - vscode.languages.createDiagnosticCollection('SunhatCompilation'); - -const SUPPORTED_LANGUAGE_IDS = ['solidity', 'vyper']; - -function updateDiagnostics(document: vscode.TextDocument): void { - if (!SUPPORTED_LANGUAGE_IDS.includes(document.languageId)) { - return; - } - - const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri); - if (!workspaceFolder) { - return; - } - const reportPath = path.join(workspaceFolder.uri.fsPath, 'audit-report.json'); - - if (!fs.existsSync(reportPath)) { - diagnosticCollection.delete(document.uri); - return; - } - - try { - const reportContent = fs.readFileSync(reportPath, 'utf8'); - const issues: AuditIssue[] = JSON.parse(reportContent); - - const diagnostics: vscode.Diagnostic[] = []; - const fileName = path.basename(document.uri.fsPath); - - for (const issue of issues) { - if (path.basename(issue.filePath) === fileName) { - const line = issue.lineNumber > 0 ? issue.lineNumber - 1 : 0; - - if (line >= document.lineCount) continue; - - const range = new vscode.Range( - line, - 0, - line, - document.lineAt(line).range.end.character - ); - - const severityMap = { - HIGH: vscode.DiagnosticSeverity.Error, - MEDIUM: vscode.DiagnosticSeverity.Warning, - LOW: vscode.DiagnosticSeverity.Information, - INFO: vscode.DiagnosticSeverity.Hint, - }; - const severity = - severityMap[issue.severity] || vscode.DiagnosticSeverity.Information; - - const diagnostic = new vscode.Diagnostic( - range, - issue.message, - severity - ); - diagnostic.code = issue.filePath; - diagnostic.source = 'Sunhat Auditor'; - (diagnostic as any).auditInfo = { - detailedDescription: issue.detailedDescription, - suggestion: issue.suggestion, - }; - - diagnostics.push(diagnostic); - } - } - - diagnosticCollection.set(document.uri, diagnostics); - } catch (e) { - console.error(`[Sunhat Auditor] Error processing audit report: ${e}`); - diagnosticCollection.delete(document.uri); - } -} -interface CompilationError { - filePath: string; - line: number; - column: number; - severity: string; - message: string; - original: string; -} - -function updateCompilationDiagnostics(document?: vscode.TextDocument): void { - const workspaceFolders = vscode.workspace.workspaceFolders; - if (!workspaceFolders) return; - - const reportPath = path.join( - workspaceFolders[0].uri.fsPath, - 'compilation-errors.json' - ); - if (!fs.existsSync(reportPath)) { - compilationDiagnosticCollection.clear(); - return; - } - - try { - const reportContent = fs.readFileSync(reportPath, 'utf8'); - const issues: CompilationError[] = JSON.parse(reportContent); - - const diagnosticsMap = new Map(); - - // Group issues by file - for (const issue of issues) { - // Normalize path - let absolutePath = issue.filePath; - if (!path.isAbsolute(absolutePath)) { - absolutePath = path.join( - workspaceFolders[0].uri.fsPath, - issue.filePath - ); - } - const uri = vscode.Uri.file(absolutePath); - const uriStr = uri.toString(); - - if (!diagnosticsMap.has(uriStr)) { - diagnosticsMap.set(uriStr, []); - } - - const line = issue.line > 0 ? issue.line - 1 : 0; - const column = issue.column > 0 ? issue.column - 1 : 0; - - const range = new vscode.Range(line, column, line, column + 100); // Approximate end - - let severity = vscode.DiagnosticSeverity.Error; - if (issue.severity === 'warning') - severity = vscode.DiagnosticSeverity.Warning; - else if (issue.severity === 'info') - severity = vscode.DiagnosticSeverity.Information; - - const diagnostic = new vscode.Diagnostic(range, issue.message, severity); - diagnostic.source = 'Sunhat'; - diagnosticsMap.get(uriStr)!.push(diagnostic); - } - - compilationDiagnosticCollection.clear(); - diagnosticsMap.forEach((diags, uriStr) => { - compilationDiagnosticCollection.set(vscode.Uri.parse(uriStr), diags); - }); - } catch (e) { - console.error(`[Sunhat] Error reading compilation errors: ${e}`); - } -} - -function registerHoverProvider(): vscode.Disposable { - return vscode.languages.registerHoverProvider(SUPPORTED_LANGUAGE_IDS, { - provideHover(document, position, token) { - const diagnostics = diagnosticCollection.get(document.uri); - if (!diagnostics) { - return null; - } - - const llmDiagnostic = diagnostics.find( - (d) => d.source === 'Sunhat Auditor' && d.range.contains(position) - ); - - if (!llmDiagnostic || !(llmDiagnostic as any).auditInfo) { - return null; - } - - const auditInfo = (llmDiagnostic as any).auditInfo; - - const contents = new vscode.MarkdownString(); - contents.isTrusted = true; - contents.supportThemeIcons = true; - - contents.appendMarkdown( - `### $(zap) Sunhat Auditor: ${llmDiagnostic.message}\n\n` - ); - contents.appendMarkdown( - `**Details:** ${auditInfo.detailedDescription}\n\n---\n\n` - ); - - contents.appendMarkdown(`**Suggestion:**\n`); - if (auditInfo.suggestion.includes('```diff')) { - contents.appendMarkdown(auditInfo.suggestion); - } else { - contents.appendCodeblock(auditInfo.suggestion, document.languageId); - } - - return new vscode.Hover(contents); - }, - }); -} - -export function activate(context: vscode.ExtensionContext): void { - context.subscriptions.push(registerHoverProvider()); - context.subscriptions.push( - vscode.workspace.onDidOpenTextDocument((doc) => { - if (doc) updateDiagnostics(doc); - }) - ); - - context.subscriptions.push( - vscode.workspace.onDidSaveTextDocument((doc) => { - if (doc) updateDiagnostics(doc); - }) - ); - - const workspaceFolders = vscode.workspace.workspaceFolders; - if (workspaceFolders) { - // Watch audit-report.json - const reportPath = path.join( - workspaceFolders[0].uri.fsPath, - 'audit-report.json' - ); - const fileWatcher = vscode.workspace.createFileSystemWatcher(reportPath); - - const updateDiagnosticsForAllOpenFiles = () => { - vscode.workspace.textDocuments.forEach((doc) => { - if (SUPPORTED_LANGUAGE_IDS.includes(doc.languageId)) { - updateDiagnostics(doc); - } - }); - }; - - fileWatcher.onDidCreate(updateDiagnosticsForAllOpenFiles); - fileWatcher.onDidChange(updateDiagnosticsForAllOpenFiles); - fileWatcher.onDidDelete(updateDiagnosticsForAllOpenFiles); - - context.subscriptions.push(fileWatcher); - - // Watch compilation-errors.json - const compilationWatcher = vscode.workspace.createFileSystemWatcher( - path.join(workspaceFolders[0].uri.fsPath, 'compilation-errors.json') - ); - compilationWatcher.onDidCreate(() => updateCompilationDiagnostics()); - compilationWatcher.onDidChange(() => updateCompilationDiagnostics()); - compilationWatcher.onDidDelete(() => - compilationDiagnosticCollection.clear() - ); - context.subscriptions.push(compilationWatcher); - - // Initial check - updateCompilationDiagnostics(); - } - - if (vscode.window.activeTextEditor) { - updateDiagnostics(vscode.window.activeTextEditor.document); - } -} - -export function deactivate(): void { - diagnosticCollection.clear(); - compilationDiagnosticCollection.clear(); -} diff --git a/vscode-extension/tsconfig.json b/vscode-extension/tsconfig.json deleted file mode 100644 index 6da2794..0000000 --- a/vscode-extension/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es2020", - "lib": [ - "es2020" - ], - "outDir": "out", - "sourceMap": true, - "strict": true, - "rootDir": "src" - }, - "include": [ - "src" - ], - "exclude": [ - "node_modules", - ".vscode-test" - ] -} diff --git a/vscode-extension/vsc-extension-quickstart.md b/vscode-extension/vsc-extension-quickstart.md deleted file mode 100644 index 2086acf..0000000 --- a/vscode-extension/vsc-extension-quickstart.md +++ /dev/null @@ -1,21 +0,0 @@ -# Welcome to your VS Code Extension Pack - -## What's in the folder - -* This folder contains all of the files necessary for your extension pack. -* `package.json` - this is the manifest file that defines the list of extensions of the extension pack. - -## Get up and running straight away - -* Press `F5` to open a new window with your extension loaded. -* Open `Extensions Viewlet` and check your extensions are installed. - -## Make changes - -* You can relaunch the extension from the debug toolbar after making changes to the files listed above. -* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. - -## Install your extension - -* To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code. -* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. From bedda4a40ebe1f80d7a02676842afe1089fcd060 Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 19:51:26 +0800 Subject: [PATCH 03/24] refactor: move initialization configuration into templates --- README.md | 2 + eslint.config.js | 2 +- package.json | 2 +- src/commands/init.ts | 205 +++++------------- .../foundry/{ => common}/script/Counter.s.sol | 0 .../foundry/{ => common}/src/Counter.sol | 0 .../foundry/{ => common}/test/Counter.t.sol | 0 .../foundry/{README.evm.md => evm/README.md} | 0 templates/foundry/evm/foundry.toml | 4 + templates/foundry/evm/package.json | 18 ++ templates/foundry/evm/sunhat.toml | 3 + .../{README.tron.md => tron/README.md} | 0 templates/foundry/tron/foundry.toml | 7 + templates/foundry/tron/package.json | 18 ++ templates/foundry/tron/sunhat.toml | 3 + .../{ => common}/contracts/Counter.sol | 0 .../hardhat/{ => common}/scripts/deploy.ts | 0 .../hardhat/{ => common}/test/Counter.test.ts | 0 templates/hardhat/{ => common}/tsconfig.json | 0 .../hardhat/{README.evm.md => evm/README.md} | 0 templates/hardhat/evm/hardhat.config.ts | 7 + templates/hardhat/evm/package.json | 21 ++ templates/hardhat/evm/sunhat.toml | 3 + .../{README.tron.md => tron/README.md} | 0 templates/hardhat/tron/hardhat.config.ts | 36 +++ templates/hardhat/tron/package.json | 22 ++ templates/hardhat/tron/sunhat.toml | 3 + test/cli.test.js | 4 +- test/init-template-assets.test.js | 195 +++++++++++++++++ 29 files changed, 399 insertions(+), 156 deletions(-) rename templates/foundry/{ => common}/script/Counter.s.sol (100%) rename templates/foundry/{ => common}/src/Counter.sol (100%) rename templates/foundry/{ => common}/test/Counter.t.sol (100%) rename templates/foundry/{README.evm.md => evm/README.md} (100%) create mode 100644 templates/foundry/evm/foundry.toml create mode 100644 templates/foundry/evm/package.json create mode 100644 templates/foundry/evm/sunhat.toml rename templates/foundry/{README.tron.md => tron/README.md} (100%) create mode 100644 templates/foundry/tron/foundry.toml create mode 100644 templates/foundry/tron/package.json create mode 100644 templates/foundry/tron/sunhat.toml rename templates/hardhat/{ => common}/contracts/Counter.sol (100%) rename templates/hardhat/{ => common}/scripts/deploy.ts (100%) rename templates/hardhat/{ => common}/test/Counter.test.ts (100%) rename templates/hardhat/{ => common}/tsconfig.json (100%) rename templates/hardhat/{README.evm.md => evm/README.md} (100%) create mode 100644 templates/hardhat/evm/hardhat.config.ts create mode 100644 templates/hardhat/evm/package.json create mode 100644 templates/hardhat/evm/sunhat.toml rename templates/hardhat/{README.tron.md => tron/README.md} (100%) create mode 100644 templates/hardhat/tron/hardhat.config.ts create mode 100644 templates/hardhat/tron/package.json create mode 100644 templates/hardhat/tron/sunhat.toml create mode 100644 test/init-template-assets.test.js diff --git a/README.md b/README.md index 76394f1..1e4e110 100644 --- a/README.md +++ b/README.md @@ -147,3 +147,5 @@ npm test Run `npm run test:templates` to generate fresh Hardhat EVM and TRON projects, install their declared dependencies, and check both with `tsc --noEmit`. This integration suite requires access to the npm registry and checks dependency declarations without enabling `skipLibCheck`. It does not require Docker or a blockchain connection. Use `npm run lint:fix` to apply ESLint fixes and `npm run format` to format JavaScript, TypeScript, Solidity templates, JSON, YAML, and Markdown. CI runs both lint and formatting checks. Generated files and local toolchains are excluded. + +Initialization assets live under `templates//common/` and `templates///`. The target directory supplies `package.json`, native framework configuration, `sunhat.toml`, and README; target files override matching common files. Edit these templates to change compiler versions, dependencies, scripts, or network defaults. Initialization copies the selected files and substitutes only the JSON string values `{{projectName}}` and `{{sunhatDependency}}`; adoption copies only the selected binding. diff --git a/eslint.config.js b/eslint.config.js index d756752..9650d60 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -35,7 +35,7 @@ export default defineConfig([ }, }, { - files: ['templates/hardhat/test/**/*.ts'], + files: ['templates/hardhat/**/test/**/*.ts'], languageOptions: { globals: globals.mocha }, }, ]); diff --git a/package.json b/package.json index a705ac3..7c21586 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "format:check": "prettier . --check", "build": "npm run clean && tsc -p tsconfig.json", "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"", - "test": "npm run build && node --test test/cli.test.js test/init-commands.test.js test/toolchain.test.js", + "test": "npm run build && node --test test/cli.test.js test/init-commands.test.js test/init-template-assets.test.js test/toolchain.test.js", "test:templates": "npm run build && node --test test/template-types.test.js", "pack:check": "npm run build && npm pack --dry-run" }, diff --git a/src/commands/init.ts b/src/commands/init.ts index 41dbde0..fff6513 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -1,5 +1,11 @@ -import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; -import { basename, dirname, resolve } from 'node:path'; +import { + existsSync, + mkdirSync, + readdirSync, + readFileSync, + writeFileSync, +} from 'node:fs'; +import { basename, dirname, join, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import { CliError, usage } from '../errors.js'; import type { Framework, Target } from '../project/binding.js'; @@ -23,13 +29,13 @@ export function initProject(argv: readonly string[]): number { const target = options.target ?? 'tron'; if (options.adopt) { validateNativeProject(root, framework); + copyExclusive( + resolve(packageRoot, 'templates', framework, target, 'sunhat.toml'), + resolve(root, 'sunhat.toml'), + ); } else { scaffold(root, framework, target); } - writeExclusive( - resolve(root, 'sunhat.toml'), - `[project]\nframework = "${framework}"\ntarget = "${target}"\n`, - ); process.stderr.write( `${options.adopt ? 'adopted' : 'initialized'} ${framework}/${target} project at ${root}\n`, ); @@ -92,162 +98,57 @@ function validateNativeProject(root: string, framework: Framework): void { } function scaffold(root: string, framework: Framework, target: Target): void { const source = resolve(packageRoot, 'templates', framework); - const destinations = - framework === 'hardhat' - ? [ - 'package.json', - 'README.md', - 'hardhat.config.ts', - 'contracts/Counter.sol', - 'scripts/deploy.ts', - 'test/Counter.test.ts', - 'tsconfig.json', - ] - : [ - 'package.json', - 'README.md', - 'foundry.toml', - 'src/Counter.sol', - 'script/Counter.s.sol', - 'test/Counter.t.sol', - ]; - const conflict = destinations.find((name) => existsSync(resolve(root, name))); + const files = new Map(); + collectTemplates(resolve(source, 'common'), '', files); + collectTemplates(resolve(source, target), '', files); + const outputs = Array.from(files, ([name, from]) => ({ + path: resolve(root, name), + data: renderTemplate(from, root), + })); + const conflict = outputs.find((file) => existsSync(file.path)); if (conflict) { throw new CliError( - `refusing to overwrite existing file ${resolve(root, conflict)}`, + `refusing to overwrite existing file ${conflict.path}`, 2, ); } - if (framework === 'hardhat') { - writeExclusive( - resolve(root, 'package.json'), - `${JSON.stringify(hardhatPackage(root, target), null, 2)}\n`, - ); - copyExclusive( - resolve(source, `README.${target}.md`), - resolve(root, 'README.md'), - ); - writeExclusive(resolve(root, 'hardhat.config.ts'), hardhatConfig(target)); - for (const name of [ - 'contracts/Counter.sol', - 'scripts/deploy.ts', - 'test/Counter.test.ts', - 'tsconfig.json', - ]) { - copyExclusive(resolve(source, name), resolve(root, name)); - } - } else { - writeExclusive( - resolve(root, 'package.json'), - `${JSON.stringify(foundryPackage(root, target), null, 2)}\n`, - ); - copyExclusive( - resolve(source, `README.${target}.md`), - resolve(root, 'README.md'), - ); - writeExclusive(resolve(root, 'foundry.toml'), foundryConfig(target)); - for (const name of [ - 'src/Counter.sol', - 'script/Counter.s.sol', - 'test/Counter.t.sol', - ]) { - copyExclusive(resolve(source, name), resolve(root, name)); - } + for (const file of outputs) { + writeExclusive(file.path, file.data); } } -function hardhatPackage(root: string, target: Target): object { - const dependencies: Record = { - '@nomicfoundation/hardhat-chai-matchers': '2.0.0', - '@nomicfoundation/hardhat-ethers': '3.0.8', - '@types/chai': '4.3.0', - '@types/mocha': '10.0.0', - chai: '4.5.0', - ethers: '6.13.0', - hardhat: '2.29.1', - 'ts-node': '10.9.2', - typescript: '5.6.3', - }; - if (target === 'tron') { - dependencies['@openzeppelin/hardhat-tron'] = '0.1.0'; +function collectTemplates( + directory: string, + relativePath: string, + files: Map, +): void { + for (const entry of readdirSync(directory, { withFileTypes: true })) { + const path = resolve(directory, entry.name); + const name = join(relativePath, entry.name); + if (entry.isDirectory()) { + collectTemplates(path, name, files); + } else if (entry.isFile()) { + files.set(name, path); + } else { + throw new CliError(`unsupported template entry ${path}`, 2); + } } - dependencies.sunhat = sunhatDependency(); - return { - name: basename(root), - version: '0.1.0', - private: true, - scripts: { build: 'sunhat compile', test: 'sunhat test' }, - devDependencies: dependencies, - }; } -function foundryPackage(root: string, target: Target): object { - return { - name: basename(root), - version: '0.1.0', - private: true, - scripts: { build: 'sunhat build', test: 'sunhat test' }, - devDependencies: { sunhat: sunhatDependency() }, - sunhat: { - foundryToolchain: { - target, - source: target === 'tron' ? 'elsvv/foundry-tron' : 'foundry-rs/foundry', - }, - }, - }; -} -function sunhatDependency(): string { - return `file:${packageRoot}`; -} -function hardhatConfig(target: Target): string { - const imports = `import "@nomicfoundation/hardhat-ethers"; -import "@nomicfoundation/hardhat-chai-matchers"; -`; - if (target === 'evm') { - return `${imports}import type { HardhatUserConfig } from "hardhat/config"; - -const config: HardhatUserConfig = { solidity: "0.8.26" }; - -export default config; -`; +function renderTemplate(path: string, root: string): string | Buffer { + const contents = readFileSync(path); + if (!path.endsWith('.json')) { + return contents; } - return `${imports}import "@openzeppelin/hardhat-tron"; -import type { HardhatUserConfig } from "hardhat/config"; - -const config: HardhatUserConfig = { - solidity: { - version: "0.8.26", - settings: { - optimizer: { enabled: true, runs: 200 }, - evmVersion: "cancun", - viaIR: true, - metadata: { bytecodeHash: "ipfs", useLiteralContent: true }, - }, - }, - tre: { - autoStart: true, - image: "tronbox/tre:dev", - compiler: { target: "tron" }, - }, - defaultNetwork: "tre", - networks: { - tre: { - url: process.env.TRE_URL ?? "http://127.0.0.1:9090/jsonrpc", - tron: true, - // Public TRE genesis development key. - // Never use it on a live network. - accounts: [process.env.TRE_PRIVATE_KEY ?? "0x0000000000000000000000000000000000000000000000000000000000000001"], - }, - }, -}; - -export default config; -`; -} -function foundryConfig(target: Target): string { - const network = - target === 'tron' - ? 'network = "tron"\nchain_id = 728126428\nevm_version = "cancun"\n' - : ''; - return `[profile.default]\nsrc = "src"\nout = "out"\nlibs = ["lib"]\n${network}`; + const values = { + projectName: basename(root), + sunhatDependency: `file:${packageRoot}`, + }; + // Replace complete JSON string values so Windows paths and quotes remain escaped. + return contents + .toString('utf8') + .replace( + /"\{\{(projectName|sunhatDependency)\}\}"/gu, + (_match, key: keyof typeof values) => JSON.stringify(values[key]), + ); } function copyExclusive(from: string, to: string): void { writeExclusive(to, readFileSync(from)); diff --git a/templates/foundry/script/Counter.s.sol b/templates/foundry/common/script/Counter.s.sol similarity index 100% rename from templates/foundry/script/Counter.s.sol rename to templates/foundry/common/script/Counter.s.sol diff --git a/templates/foundry/src/Counter.sol b/templates/foundry/common/src/Counter.sol similarity index 100% rename from templates/foundry/src/Counter.sol rename to templates/foundry/common/src/Counter.sol diff --git a/templates/foundry/test/Counter.t.sol b/templates/foundry/common/test/Counter.t.sol similarity index 100% rename from templates/foundry/test/Counter.t.sol rename to templates/foundry/common/test/Counter.t.sol diff --git a/templates/foundry/README.evm.md b/templates/foundry/evm/README.md similarity index 100% rename from templates/foundry/README.evm.md rename to templates/foundry/evm/README.md diff --git a/templates/foundry/evm/foundry.toml b/templates/foundry/evm/foundry.toml new file mode 100644 index 0000000..2bc70ba --- /dev/null +++ b/templates/foundry/evm/foundry.toml @@ -0,0 +1,4 @@ +[profile.default] +src = "src" +out = "out" +libs = ["lib"] diff --git a/templates/foundry/evm/package.json b/templates/foundry/evm/package.json new file mode 100644 index 0000000..d1e06a3 --- /dev/null +++ b/templates/foundry/evm/package.json @@ -0,0 +1,18 @@ +{ + "name": "{{projectName}}", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "sunhat build", + "test": "sunhat test" + }, + "devDependencies": { + "sunhat": "{{sunhatDependency}}" + }, + "sunhat": { + "foundryToolchain": { + "target": "evm", + "source": "foundry-rs/foundry" + } + } +} diff --git a/templates/foundry/evm/sunhat.toml b/templates/foundry/evm/sunhat.toml new file mode 100644 index 0000000..d7e34df --- /dev/null +++ b/templates/foundry/evm/sunhat.toml @@ -0,0 +1,3 @@ +[project] +framework = "foundry" +target = "evm" diff --git a/templates/foundry/README.tron.md b/templates/foundry/tron/README.md similarity index 100% rename from templates/foundry/README.tron.md rename to templates/foundry/tron/README.md diff --git a/templates/foundry/tron/foundry.toml b/templates/foundry/tron/foundry.toml new file mode 100644 index 0000000..b360d30 --- /dev/null +++ b/templates/foundry/tron/foundry.toml @@ -0,0 +1,7 @@ +[profile.default] +src = "src" +out = "out" +libs = ["lib"] +network = "tron" +chain_id = 728126428 +evm_version = "cancun" diff --git a/templates/foundry/tron/package.json b/templates/foundry/tron/package.json new file mode 100644 index 0000000..1c59f4a --- /dev/null +++ b/templates/foundry/tron/package.json @@ -0,0 +1,18 @@ +{ + "name": "{{projectName}}", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "sunhat build", + "test": "sunhat test" + }, + "devDependencies": { + "sunhat": "{{sunhatDependency}}" + }, + "sunhat": { + "foundryToolchain": { + "target": "tron", + "source": "elsvv/foundry-tron" + } + } +} diff --git a/templates/foundry/tron/sunhat.toml b/templates/foundry/tron/sunhat.toml new file mode 100644 index 0000000..cdf40c8 --- /dev/null +++ b/templates/foundry/tron/sunhat.toml @@ -0,0 +1,3 @@ +[project] +framework = "foundry" +target = "tron" diff --git a/templates/hardhat/contracts/Counter.sol b/templates/hardhat/common/contracts/Counter.sol similarity index 100% rename from templates/hardhat/contracts/Counter.sol rename to templates/hardhat/common/contracts/Counter.sol diff --git a/templates/hardhat/scripts/deploy.ts b/templates/hardhat/common/scripts/deploy.ts similarity index 100% rename from templates/hardhat/scripts/deploy.ts rename to templates/hardhat/common/scripts/deploy.ts diff --git a/templates/hardhat/test/Counter.test.ts b/templates/hardhat/common/test/Counter.test.ts similarity index 100% rename from templates/hardhat/test/Counter.test.ts rename to templates/hardhat/common/test/Counter.test.ts diff --git a/templates/hardhat/tsconfig.json b/templates/hardhat/common/tsconfig.json similarity index 100% rename from templates/hardhat/tsconfig.json rename to templates/hardhat/common/tsconfig.json diff --git a/templates/hardhat/README.evm.md b/templates/hardhat/evm/README.md similarity index 100% rename from templates/hardhat/README.evm.md rename to templates/hardhat/evm/README.md diff --git a/templates/hardhat/evm/hardhat.config.ts b/templates/hardhat/evm/hardhat.config.ts new file mode 100644 index 0000000..8f762a5 --- /dev/null +++ b/templates/hardhat/evm/hardhat.config.ts @@ -0,0 +1,7 @@ +import '@nomicfoundation/hardhat-ethers'; +import '@nomicfoundation/hardhat-chai-matchers'; +import type { HardhatUserConfig } from 'hardhat/config'; + +const config: HardhatUserConfig = { solidity: '0.8.26' }; + +export default config; diff --git a/templates/hardhat/evm/package.json b/templates/hardhat/evm/package.json new file mode 100644 index 0000000..31d8a93 --- /dev/null +++ b/templates/hardhat/evm/package.json @@ -0,0 +1,21 @@ +{ + "name": "{{projectName}}", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "sunhat compile", + "test": "sunhat test" + }, + "devDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "2.0.0", + "@nomicfoundation/hardhat-ethers": "3.0.8", + "@types/chai": "4.3.0", + "@types/mocha": "10.0.0", + "chai": "4.5.0", + "ethers": "6.13.0", + "hardhat": "2.29.1", + "ts-node": "10.9.2", + "typescript": "5.6.3", + "sunhat": "{{sunhatDependency}}" + } +} diff --git a/templates/hardhat/evm/sunhat.toml b/templates/hardhat/evm/sunhat.toml new file mode 100644 index 0000000..fc754bf --- /dev/null +++ b/templates/hardhat/evm/sunhat.toml @@ -0,0 +1,3 @@ +[project] +framework = "hardhat" +target = "evm" diff --git a/templates/hardhat/README.tron.md b/templates/hardhat/tron/README.md similarity index 100% rename from templates/hardhat/README.tron.md rename to templates/hardhat/tron/README.md diff --git a/templates/hardhat/tron/hardhat.config.ts b/templates/hardhat/tron/hardhat.config.ts new file mode 100644 index 0000000..23de1e1 --- /dev/null +++ b/templates/hardhat/tron/hardhat.config.ts @@ -0,0 +1,36 @@ +import '@nomicfoundation/hardhat-ethers'; +import '@nomicfoundation/hardhat-chai-matchers'; +import '@openzeppelin/hardhat-tron'; +import type { HardhatUserConfig } from 'hardhat/config'; + +const config: HardhatUserConfig = { + solidity: { + version: '0.8.26', + settings: { + optimizer: { enabled: true, runs: 200 }, + evmVersion: 'cancun', + viaIR: true, + metadata: { bytecodeHash: 'ipfs', useLiteralContent: true }, + }, + }, + tre: { + autoStart: true, + image: 'tronbox/tre:dev', + compiler: { target: 'tron' }, + }, + defaultNetwork: 'tre', + networks: { + tre: { + url: process.env.TRE_URL ?? 'http://127.0.0.1:9090/jsonrpc', + tron: true, + // Public TRE genesis development key. + // Never use it on a live network. + accounts: [ + process.env.TRE_PRIVATE_KEY ?? + '0x0000000000000000000000000000000000000000000000000000000000000001', + ], + }, + }, +}; + +export default config; diff --git a/templates/hardhat/tron/package.json b/templates/hardhat/tron/package.json new file mode 100644 index 0000000..5a644fd --- /dev/null +++ b/templates/hardhat/tron/package.json @@ -0,0 +1,22 @@ +{ + "name": "{{projectName}}", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "sunhat compile", + "test": "sunhat test" + }, + "devDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "2.0.0", + "@nomicfoundation/hardhat-ethers": "3.0.8", + "@types/chai": "4.3.0", + "@types/mocha": "10.0.0", + "chai": "4.5.0", + "ethers": "6.13.0", + "hardhat": "2.29.1", + "ts-node": "10.9.2", + "typescript": "5.6.3", + "@openzeppelin/hardhat-tron": "0.1.0", + "sunhat": "{{sunhatDependency}}" + } +} diff --git a/templates/hardhat/tron/sunhat.toml b/templates/hardhat/tron/sunhat.toml new file mode 100644 index 0000000..b1082b1 --- /dev/null +++ b/templates/hardhat/tron/sunhat.toml @@ -0,0 +1,3 @@ +[project] +framework = "hardhat" +target = "tron" diff --git a/test/cli.test.js b/test/cli.test.js index 2083ff8..225b7f1 100644 --- a/test/cli.test.js +++ b/test/cli.test.js @@ -170,9 +170,9 @@ test('TRON Hardhat scaffold selects TRE and loads its ethers bridge last', () => config.indexOf('@nomicfoundation/hardhat-ethers') < config.indexOf('@openzeppelin/hardhat-tron'), ); - assert.match(config, /defaultNetwork: "tre"/u); + assert.match(config, /defaultNetwork: ['"]tre['"]/u); assert.match(config, /tron: true/u); - assert.match(config, /compiler: \{ target: "tron" \}/u); + assert.match(config, /compiler: \{ target: ['"]tron['"] \}/u); assert.match(config, /0x0{63}1/u); const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); assert.match(readme, /Hardhat TRON Project with Sunhat/u); diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js new file mode 100644 index 0000000..613c03b --- /dev/null +++ b/test/init-template-assets.test.js @@ -0,0 +1,195 @@ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import { + cpSync, + existsSync, + mkdirSync, + mkdtempSync, + readFileSync, + realpathSync, + rmSync, + writeFileSync, +} from 'node:fs'; +import { tmpdir } from 'node:os'; +import { basename, dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import test from 'node:test'; + +const repository = fileURLToPath(new URL('../', import.meta.url)); + +function runtime(t) { + const temporary = realpathSync( + mkdtempSync(resolve(tmpdir(), 'sunhat-assets-')), + ); + t.after(() => rmSync(temporary, { recursive: true, force: true })); + const packageRoot = resolve( + temporary, + process.platform === 'win32' ? 'package with spaces' : 'package "quoted"', + ); + mkdirSync(packageRoot); + for (const name of ['bin', 'dist', 'templates', 'package.json']) { + cpSync(resolve(repository, name), resolve(packageRoot, name), { + recursive: true, + }); + } + return { temporary, packageRoot, cli: resolve(packageRoot, 'bin/sunhat.js') }; +} + +function json(path, value) { + mkdirSync(dirname(path), { recursive: true }); + writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`); +} + +function run(fixture, args) { + return spawnSync(process.execPath, [fixture.cli, 'init', ...args], { + cwd: fixture.temporary, + encoding: 'utf8', + timeout: 10_000, + }); +} + +for (const framework of ['hardhat', 'foundry']) { + for (const target of ['evm', 'tron']) { + test(`${framework}/${target} initialization follows template changes without rebuilding`, (t) => { + const fixture = runtime(t); + const source = resolve(fixture.packageRoot, 'templates', framework); + const variant = resolve(source, target); + const project = resolve( + fixture.temporary, + process.platform === 'win32' + ? 'project with spaces' + : 'project "quoted"', + ); + const manifest = JSON.parse( + readFileSync(resolve(variant, 'package.json')), + ); + manifest.devDependencies['@types/node'] = '22.10.2'; + manifest.scripts.typecheck = 'tsc --noEmit'; + json(resolve(variant, 'package.json'), manifest); + + const native = + framework === 'hardhat' ? 'hardhat.config.ts' : 'foundry.toml'; + const originalConfig = readFileSync(resolve(variant, native), 'utf8'); + const customizedConfig = + framework === 'hardhat' + ? originalConfig.replaceAll('0.8.26', '0.8.25') + : `${originalConfig}optimizer = true\n`; + assert.notEqual(customizedConfig, originalConfig); + writeFileSync(resolve(variant, native), customizedConfig); + const binding = readFileSync( + resolve(variant, 'sunhat.toml'), + 'utf8', + ).replace(/\n$/u, ' # template-owned binding\n'); + writeFileSync(resolve(variant, 'sunhat.toml'), binding); + const readme = `# Customized ${framework}/${target} template\n`; + writeFileSync(resolve(variant, 'README.md'), readme); + json(resolve(source, 'common/config/shared.json'), { enabled: true }); + json(resolve(source, 'common/config/runtime.json'), { layer: 'common' }); + json(resolve(variant, 'config/runtime.json'), { + layer: target, + name: '{{projectName}}', + }); + + const result = run(fixture, [ + '--framework', + framework, + '--target', + target, + project, + ]); + assert.equal( + result.status, + 0, + result.stderr || String(result.error ?? ''), + ); + const generated = JSON.parse( + readFileSync(resolve(project, 'package.json')), + ); + assert.equal(generated.name, basename(project)); + assert.equal( + generated.devDependencies.sunhat, + `file:${fixture.packageRoot}`, + ); + assert.equal(generated.devDependencies['@types/node'], '22.10.2'); + assert.equal(generated.scripts.typecheck, 'tsc --noEmit'); + assert.equal( + readFileSync(resolve(project, native), 'utf8'), + customizedConfig, + ); + assert.equal( + readFileSync(resolve(project, 'sunhat.toml'), 'utf8'), + binding, + ); + assert.equal(readFileSync(resolve(project, 'README.md'), 'utf8'), readme); + assert.deepEqual( + JSON.parse(readFileSync(resolve(project, 'config/shared.json'))), + { enabled: true }, + ); + assert.deepEqual( + JSON.parse(readFileSync(resolve(project, 'config/runtime.json'))), + { + layer: target, + name: basename(project), + }, + ); + }); + } +} + +test('new template files participate in conflict checks before any project file is written', (t) => { + const fixture = runtime(t); + json( + resolve(fixture.packageRoot, 'templates/foundry/common/config/custom.json'), + { enabled: true }, + ); + const project = resolve(fixture.temporary, 'existing project'); + const owned = resolve(project, 'config/custom.json'); + mkdirSync(dirname(owned), { recursive: true }); + writeFileSync(owned, 'user-owned content'); + const result = run(fixture, [project]); + assert.equal(result.status, 2, result.stderr); + assert.match(result.stderr, /refusing to overwrite existing file/u); + assert.equal(readFileSync(owned, 'utf8'), 'user-owned content'); + for (const name of ['package.json', 'sunhat.toml', 'src/Counter.sol']) { + assert.equal(existsSync(resolve(project, name)), false); + } +}); + +test('adoption reads the template binding without copying the remaining scaffold', (t) => { + const fixture = runtime(t); + const project = resolve(fixture.temporary, 'adopted project'); + const config = "export default { solidity: '0.8.26' };\n"; + json(resolve(project, 'package.json'), { + name: 'existing-project', + private: true, + }); + writeFileSync(resolve(project, 'hardhat.config.ts'), config); + const manifest = readFileSync(resolve(project, 'package.json')); + const bindingPath = resolve( + fixture.packageRoot, + 'templates/hardhat/evm/sunhat.toml', + ); + const binding = readFileSync(bindingPath, 'utf8').replace( + /\n$/u, + ' # adopted template\n', + ); + writeFileSync(bindingPath, binding); + const result = run(fixture, [ + '--framework', + 'hardhat', + '--target', + 'evm', + '--adopt', + project, + ]); + assert.equal(result.status, 0, result.stderr || String(result.error ?? '')); + assert.equal(readFileSync(resolve(project, 'sunhat.toml'), 'utf8'), binding); + assert.equal( + readFileSync(resolve(project, 'hardhat.config.ts'), 'utf8'), + config, + ); + assert.deepEqual(readFileSync(resolve(project, 'package.json')), manifest); + for (const name of ['README.md', 'contracts', 'test', 'tsconfig.json']) { + assert.equal(existsSync(resolve(project, name)), false); + } +}); From 0e93ca40e8ac961188f6683ec738cbcf83fd7a8d Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 19:56:42 +0800 Subject: [PATCH 04/24] refactor: use TOML library and native init argument parsing --- README.md | 2 + package-lock.json | 15 ++++ package.json | 5 +- src/commands/init.ts | 69 ++++++++-------- src/project/binding.ts | 38 ++++----- test/binding.test.js | 131 ++++++++++++++++++++++++++++++ test/cli.test.js | 64 ++++++++++++++- test/init-template-assets.test.js | 6 ++ 8 files changed, 269 insertions(+), 61 deletions(-) create mode 100644 test/binding.test.js diff --git a/README.md b/README.md index 1e4e110..5083ad8 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,8 @@ framework = "hardhat" target = "evm" ``` +Sunhat parses this file with [smol-toml](https://github.com/squirrelchat/smol-toml). Standard TOML syntax is supported; invalid syntax or project bindings exit with code `4`. + Initialization uses exclusive file creation. It fails if a destination file already exists and never overwrites unknown content. Dependency installation remains under the project's control. After initialization, enter the project directory and install its dependencies: diff --git a/package-lock.json b/package-lock.json index a23d623..c8b185d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "@sun-protocol/sunhat", "version": "2.0.0", "license": "MIT OR Apache-2.0", + "dependencies": { + "smol-toml": "1.9.1" + }, "bin": { "sunhat": "bin/sunhat.js" }, @@ -1295,6 +1298,18 @@ "node": ">=8" } }, + "node_modules/smol-toml": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.9.1.tgz", + "integrity": "sha512-j7WyPdf0CJoutMzMoPLF/bVXHtKZIT9Rb4eGeEbWw8X2t5oirjPgpL+OpaENZrILYaXqYwnVH+qgUwVbl+pUJQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 18" + }, + "funding": { + "url": "https://github.com/sponsors/cyyynthia" + } + }, "node_modules/tinyglobby": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", diff --git a/package.json b/package.json index 7c21586..c4d210d 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "format:check": "prettier . --check", "build": "npm run clean && tsc -p tsconfig.json", "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"", - "test": "npm run build && node --test test/cli.test.js test/init-commands.test.js test/init-template-assets.test.js test/toolchain.test.js", + "test": "npm run build && node --test test/binding.test.js test/cli.test.js test/init-commands.test.js test/init-template-assets.test.js test/toolchain.test.js", "test:templates": "npm run build && node --test test/template-types.test.js", "pack:check": "npm run build && npm pack --dry-run" }, @@ -36,5 +36,8 @@ "prettier-plugin-solidity": "2.4.1", "typescript": "5.7.2", "typescript-eslint": "8.72.1" + }, + "dependencies": { + "smol-toml": "1.9.1" } } diff --git a/src/commands/init.ts b/src/commands/init.ts index fff6513..b80bd43 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -7,13 +7,14 @@ import { } from 'node:fs'; import { basename, dirname, join, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import { parseArgs } from 'node:util'; import { CliError, usage } from '../errors.js'; import type { Framework, Target } from '../project/binding.js'; import { parseTarget } from '../cli/parser.js'; interface InitOptions { framework: Framework; - target?: Target; + target: Target; path: string; adopt: boolean; } @@ -26,7 +27,7 @@ export function initProject(argv: readonly string[]): number { if (existsSync(resolve(root, 'sunhat.toml'))) { return usage(`${root} is already bound by sunhat.toml`); } - const target = options.target ?? 'tron'; + const { target } = options; if (options.adopt) { validateNativeProject(root, framework); copyExclusive( @@ -42,45 +43,43 @@ export function initProject(argv: readonly string[]): number { return 0; } function parseOptions(argv: readonly string[]): InitOptions { - let framework: Framework = 'foundry'; - let target: Target | undefined; - let path = '.'; - let positional = false; - let adopt = false; - for (let i = 0; i < argv.length; i += 1) { - const arg = argv[i]!; - if (arg === '--framework') { - const value = argv[++i]; - if (value !== 'foundry' && value !== 'hardhat') { - return usage('--framework requires foundry or hardhat'); - } - framework = value; - } else if (arg === '--target') { - const value = argv[++i]; - if (!value) { - return usage('--target requires tron or evm'); - } - target = parseTarget(value); - } else if (arg === '--adopt') { - adopt = true; - } else if (arg === '-h' || arg === '--help') { + try { + const { values, positionals } = parseArgs({ + args: [...argv], + options: { + framework: { type: 'string', default: 'foundry' }, + target: { type: 'string', default: 'tron' }, + adopt: { type: 'boolean', default: false }, + help: { type: 'boolean', short: 'h' }, + }, + allowPositionals: true, + strict: true, + }); + if (values.help) { process.stdout.write( 'Usage: sunhat init [--framework ] [--target ] [--adopt] [path]\nDefaults: framework=foundry, target=tron\n', ); return process.exit(0) as never; - } else if (arg.startsWith('-')) { - return usage(`unknown init option ${arg}`); - } else { - if (positional) { - return usage('init accepts at most one path'); - } - path = arg; - positional = true; } + if (positionals.length > 1) { + return usage('init accepts at most one path'); + } + const framework = values.framework; + if (framework !== 'foundry' && framework !== 'hardhat') { + return usage('--framework requires foundry or hardhat'); + } + return { + framework, + target: parseTarget(values.target), + path: positionals[0] ?? '.', + adopt: values.adopt, + }; + } catch (error) { + if (error instanceof CliError) { + throw error; + } + return usage(error instanceof Error ? error.message : String(error)); } - return target - ? { framework, target, path, adopt } - : { framework, path, adopt }; } function validateNativeProject(root: string, framework: Framework): void { const found = diff --git a/src/project/binding.ts b/src/project/binding.ts index 33c3886..62ad8dd 100644 --- a/src/project/binding.ts +++ b/src/project/binding.ts @@ -1,4 +1,6 @@ import { readFileSync } from 'node:fs'; +import { parse } from 'smol-toml'; +import type { TomlTable } from 'smol-toml'; import { CliError } from '../errors.js'; export type Framework = 'hardhat' | 'foundry'; export type Target = 'tron' | 'evm'; @@ -13,29 +15,21 @@ export function readBinding(path: string): Binding { } catch (error) { throw new CliError(`cannot read ${path}: ${msg(error)}`, 4); } - let section = ''; - const values = new Map(); - for (const raw of text.split(/\r?\n/u)) { - const line = raw.replace(/\s+#.*$/u, '').trim(); - if (!line) { - continue; - } - const header = /^\[(.+)\]$/u.exec(line); - if (header) { - section = header[1] ?? ''; - continue; - } - if (section !== 'project') { - continue; - } - const assignment = /^(framework|target)\s*=\s*"([^"]+)"\s*$/u.exec(line); - if (!assignment) { - throw new CliError(`invalid project binding in ${path}: ${line}`, 4); - } - values.set(assignment[1]!, assignment[2]!); + let document: TomlTable; + try { + document = parse(text); + } catch (error) { + throw new CliError(`invalid TOML in ${path}: ${msg(error)}`, 4); + } + const project = document.project; + if (!project || typeof project !== 'object' || Array.isArray(project)) { + throw new CliError( + `invalid project binding in ${path}; expected a [project] table`, + 4, + ); } - const framework = values.get('framework'); - const target = values.get('target'); + const framework = 'framework' in project ? project.framework : undefined; + const target = 'target' in project ? project.target : undefined; if (framework !== 'hardhat' && framework !== 'foundry') { throw new CliError( `invalid framework in ${path}; expected hardhat or foundry`, diff --git a/test/binding.test.js b/test/binding.test.js new file mode 100644 index 0000000..97bb798 --- /dev/null +++ b/test/binding.test.js @@ -0,0 +1,131 @@ +import assert from 'node:assert/strict'; +import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { resolve } from 'node:path'; +import test from 'node:test'; +import { CliError } from '../dist/errors.js'; +import { readBinding } from '../dist/project/binding.js'; + +function fixture(t) { + const root = mkdtempSync(resolve(tmpdir(), 'sunhat-binding-')); + t.after(() => rmSync(root, { recursive: true, force: true })); + return resolve(root, 'sunhat.toml'); +} + +const valid = [ + [ + 'literal strings and adjacent comments with CRLF', + "[project]\r\nframework = 'hardhat'# framework\r\ntarget = 'evm'\r\n", + ], + ['dotted keys', "project.framework = 'hardhat'\nproject.target = 'evm'\n"], + [ + 'quoted keys and string escapes', + String.raw`["project"] +"framework" = "hard\u0068at" +'target' = "evm" +`, + ], + [ + 'inline project table and unrelated configuration', + `project = { framework = "hardhat", target = "evm" } +[metadata] +description = "# inside a string" +features = ["one", "two"] +`, + ], +]; + +for (const [name, contents] of valid) { + test(`binding accepts TOML ${name}`, (t) => { + const path = fixture(t); + writeFileSync(path, contents); + assert.deepEqual(readBinding(path), { + framework: 'hardhat', + target: 'evm', + }); + }); +} + +const invalid = [ + [ + 'duplicate keys', + '[project]\nframework = "hardhat"\nframework = "foundry"\ntarget = "evm"\n', + /invalid TOML/u, + ], + [ + 'duplicate tables', + '[project]\nframework = "hardhat"\ntarget = "evm"\n[project]\n', + /invalid TOML/u, + ], + [ + 'malformed syntax in another table', + '[project]\nframework = "hardhat"\ntarget = "evm"\n[metadata]\ninvalid line\n', + /invalid TOML/u, + ], + [ + 'unterminated strings', + '[project]\nframework = "hardhat"\ntarget = "evm\n', + /invalid TOML/u, + ], + ['missing project table', '', /invalid project binding/u], + ['scalar project', 'project = "hardhat"', /invalid project binding/u], + ['array project', 'project = []', /invalid project binding/u], + [ + 'array of project tables', + '[[project]]\nframework = "hardhat"\ntarget = "evm"', + /invalid project binding/u, + ], + ['missing framework', '[project]\ntarget = "evm"', /invalid framework/u], + [ + 'unsupported framework', + '[project]\nframework = "other"\ntarget = "evm"', + /invalid framework/u, + ], + [ + 'non-string framework', + '[project]\nframework = 1\ntarget = "evm"', + /invalid framework/u, + ], + ['missing target', '[project]\nframework = "hardhat"', /invalid target/u], + [ + 'unsupported target', + '[project]\nframework = "hardhat"\ntarget = "other"', + /invalid target/u, + ], + [ + 'non-string target', + '[project]\nframework = "hardhat"\ntarget = ["evm"]', + /invalid target/u, + ], +]; + +for (const [name, contents, message] of invalid) { + test(`binding rejects ${name} with exit code 4`, (t) => { + const path = fixture(t); + writeFileSync(path, contents); + assert.throws( + () => readBinding(path), + (error) => { + assert.ok(error instanceof CliError); + assert.equal(error.exitCode, 4); + assert.match(error.message, message); + assert.ok(error.message.includes(path)); + return true; + }, + ); + }); +} + +test('binding read errors retain their path and exit code', (t) => { + const path = fixture(t); + assert.throws( + () => readBinding(path), + (error) => { + assert.ok(error instanceof CliError); + assert.equal(error.exitCode, 4); + assert.match(error.message, /cannot read/u); + assert.ok(error.message.includes(path)); + return true; + }, + ); +}); diff --git a/test/cli.test.js b/test/cli.test.js index 225b7f1..61c16f7 100644 --- a/test/cli.test.js +++ b/test/cli.test.js @@ -189,11 +189,56 @@ test('init rejects an invalid framework', () => { assert.equal(result.status, 2); assert.match(result.stderr, /framework requires foundry or hardhat/u); }); -test('help reports the TRON target default', () => { - const result = run(temp('help'), ['init', '--help']); +for (const option of ['--help', '-h']) { + test(`init ${option} reports the TRON target default`, () => { + const result = run(temp('help'), ['init', option]); + assert.equal(result.status, 0, result.stderr); + assert.match(result.stdout, /target=tron/u); + }); +} +test('init accepts equals options after the project path', () => { + const root = temp('equals-init'); + const result = run(dirname(root), [ + 'init', + root, + '--framework=hardhat', + '--target=evm', + ]); assert.equal(result.status, 0, result.stderr); - assert.match(result.stdout, /target=tron/u); + assert.match( + readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), + /framework = "hardhat"\ntarget = "evm"/u, + ); }); +test('init accepts a dash-prefixed project path after the option terminator', () => { + const root = temp('terminator-init'); + const result = run(root, ['init', '--', '-project']); + assert.equal(result.status, 0, result.stderr); + assert.match( + readFileSync(resolve(root, '-project/sunhat.toml'), 'utf8'), + /framework = "foundry"\ntarget = "tron"/u, + ); +}); +for (const [name, args] of [ + ['unknown long option', ['--unknown']], + ['unknown short option', ['-x']], + ['missing framework value', ['--framework']], + ['missing target value', ['--target']], + ['ambiguous target value', ['--target', '--adopt']], + ['invalid boolean value', ['--adopt=false']], + ['invalid target', ['--target', 'other']], + ['empty framework', ['--framework=']], + ['multiple project paths', ['first', 'second']], +]) { + test(`init rejects ${name} with exit code 2`, () => { + const root = temp('invalid-init'); + const result = run(root, ['init', ...args]); + assert.equal(result.status, 2, result.stderr); + assert.match(result.stderr, /^sunhat: /u); + assert.throws(() => readFileSync(resolve(root, 'sunhat.toml'))); + assert.throws(() => readFileSync(resolve(root, 'first/package.json'))); + }); +} test('scaffold conflict is detected before any write', () => { const root = temp('atomic'); mkdirSync(resolve(root, 'contracts')); @@ -255,6 +300,19 @@ test('hardhat receives literal argv and native exit code', () => { assert.equal(result.status, 17); assert.equal(result.stdout, '["compile","$HOME","test argument"]'); }); +test('invalid TOML stops command routing with exit code 4', () => { + const root = temp('invalid-toml'); + binding(root, 'hardhat', 'evm'); + hardhat(root); + writeFileSync( + resolve(root, 'sunhat.toml'), + '[project]\nframework = "hardhat"\ntarget = "evm"\ntarget = "tron"\n', + ); + const result = run(root, ['compile']); + assert.equal(result.status, 4); + assert.match(result.stderr, /invalid TOML/u); + assert.equal(result.stdout, ''); +}); test('legacy framework namespaces are rejected', () => { const result = run(temp('legacy'), ['foundry', 'build']); assert.equal(result.status, 2); diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js index 613c03b..6e8cc6b 100644 --- a/test/init-template-assets.test.js +++ b/test/init-template-assets.test.js @@ -8,6 +8,7 @@ import { readFileSync, realpathSync, rmSync, + symlinkSync, writeFileSync, } from 'node:fs'; import { tmpdir } from 'node:os'; @@ -32,6 +33,11 @@ function runtime(t) { recursive: true, }); } + symlinkSync( + resolve(repository, 'node_modules'), + resolve(packageRoot, 'node_modules'), + process.platform === 'win32' ? 'junction' : 'dir', + ); return { temporary, packageRoot, cli: resolve(packageRoot, 'bin/sunhat.js') }; } From 5ff4d6bee6548fb4c3f29c5793ccdb312ff7e267 Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 20:05:55 +0800 Subject: [PATCH 05/24] refactor: separate TOML parsing from binding validation --- .github/workflows/ci.yml | 16 ++++++++++++ README.md | 2 +- docs/toml-binding.md | 36 ++++++++++++++++++++++++++ package.json | 4 ++- src/project/binding.ts | 24 ++++++++++++------ src/project/toml.ts | 9 +++++++ test/binding.test.js | 40 ++++++++++++++++++++++++++++- test/toml.test.js | 55 ++++++++++++++++++++++++++++++++++++++++ 8 files changed, 175 insertions(+), 11 deletions(-) create mode 100644 docs/toml-binding.md create mode 100644 src/project/toml.ts create mode 100644 test/toml.test.js diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b9e128d..939c044 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,22 @@ jobs: - run: npm run test:templates - run: npm run pack:check + minimum-node: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: 24.22.1 + cache: npm + - run: npm ci + - run: npm run build + - uses: actions/setup-node@v7 + with: + node-version: 20.11.0 + - run: npm ci --omit=dev --ignore-scripts + - run: npm run test:runtime + windows-toolchain: runs-on: windows-latest steps: diff --git a/README.md b/README.md index 5083ad8..368d4b9 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ framework = "hardhat" target = "evm" ``` -Sunhat parses this file with [smol-toml](https://github.com/squirrelchat/smol-toml). Standard TOML syntax is supported; invalid syntax or project bindings exit with code `4`. +Write bindings using TOML 1.0.0 syntax. The parser backend is pinned to `smol-toml@1.9.1`; it also accepts newer syntax and has known conformance exceptions. Sunhat does not promise TOML 1.1 support or strict rejection of everything outside 1.0. See [the parser decision and compatibility limits](docs/toml-binding.md). Binding validation independently requires a `project` table with the `framework` and `target` string values shown above; file, syntax, and binding errors exit with code `4`. Initialization uses exclusive file creation. It fails if a destination file already exists and never overwrites unknown content. Dependency installation remains under the project's control. diff --git a/docs/toml-binding.md b/docs/toml-binding.md new file mode 100644 index 0000000..67de676 --- /dev/null +++ b/docs/toml-binding.md @@ -0,0 +1,36 @@ +# TOML binding compatibility + +Sunhat's binding syntax baseline is **TOML 1.0.0**. The routing contract remains a `project` table containing `framework = "hardhat" | "foundry"` and `target = "evm" | "tron"`. Other parsed keys are ignored. Project discovery, the `Binding` interface, and `readBinding(path)` remain unchanged. + +This is a binding compatibility baseline, not a claim of complete TOML conformance or a strict 1.0-only parser. The selected backend also accepts TOML 1.1 constructs, including multiline inline tables and newer escapes. These extensions are outside Sunhat's compatibility promise. Upgrading the dependency does not change that promise; changing the baseline requires an explicit documentation and test update. + +## Parser decision + +The candidates were checked on 2026-10-27 using their npm metadata and upstream documentation: + +| Candidate | Syntax and runtime | Maintenance evidence | Decision | +| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------- | --------------------------------------------------------------- | +| [`smol-toml@1.9.1`](https://github.com/squirrelchat/smol-toml/tree/v1.9.1) | TOML 1.1; Node >=18; native ESM and TypeScript declarations; no runtime dependencies | Published 2026-10-09; fixes invalid exponent acceptance | Selected after compatibility and grammar checks | +| [`toml@5.0.1`](https://github.com/BinaryMuse/toml-node) | TOML 1.1; Node >=20; no runtime dependencies | Published 2026-10-12 | Maintained alternative; does not provide a 1.0-only mode either | +| [`@ltd/j-toml@1.38.0`](https://github.com/LongTengDao/j-toml) | Supports selecting TOML 1.0 explicitly | Latest npm publication 2023-01-16 | Version selection is useful, but release maintenance is older | +| [`@iarna/toml@2.2.5`](https://github.com/iarna/iarna-toml) | Established parser; no current Node 20 compatibility claim verified here | Latest stable npm publication 2020-04-22 | Not selected given the release gap | + +The choice favors a maintained ESM backend without adding a syntax implementation or a Temporal polyfill. The package is pinned exactly in `package.json` and the lockfile. Its `engines` field alone is not considered proof of Node 20.11 compatibility. + +## Processing boundaries + +`readBinding(path)` reads the file, calls `parseToml(text)`, then calls `validateBinding(document, path)` and returns a `Binding`. + +- `src/project/toml.ts` is the only parser integration. It returns `unknown`, preserves integers as `bigint`, and explicitly selects legacy date handling so Node 20.11 does not need Temporal. +- `validateBinding` accepts an unknown value and checks the project table and routing enums. It imports no parser types and performs no syntax parsing. +- File and parser errors are wrapped separately by `readBinding`. All binding-load failures retain the existing exit code `4` and file path. + +## Coverage and limits + +The upstream [README at the selected tag](https://github.com/squirrelchat/smol-toml/blob/v1.9.1/README.md) describes its official `toml-test` coverage and exceptions. Legacy dates can normalize invalid calendar days, and JavaScript string decoding has Unicode/UTF-8 limitations. Enabling bigint avoids losing signed 64-bit integer precision. Sunhat does not advertise full general-purpose TOML conformance. + +For an independent syntax acceptance check, the selected options were run against the fixed [official `toml-test v2.2.0` TOML 1.0 manifest](https://github.com/toml-lang/toml-test/blob/v2.2.0/tests/files-toml-1.0.0): 205 valid documents accepted, 453 invalid documents rejected, and 21 invalid documents accepted. The 21 comprise nine newer-syntax cases, six calendar-date cases, and six encoding cases. This check measures acceptance and rejection; it does not compare every decoded value with the suite's expected JSON. + +Repository tests separately exercise TOML 1.0 binding syntax, integer preservation, date parsing, duplicate definitions, Binding validation without parsing, file errors, and command-routing exit codes. The minimum-runtime CI job builds with the development Node version, installs only production dependencies on **Node 20.11.0**, and runs the runtime tests there. Lint and build tooling use the development Node version. + +Local verification on macOS arm64 used the official Node 20.11.0 binary with its archive checked against Node's published SHA-256. Both Node 20.11.0 and the development Node 24.22.1 passed 181 runtime tests; two Linux filesystem tests were skipped on macOS. A separately packed package installed with production dependencies only also passed initialization, syntax-error handling, and Binding-error handling on Node 20.11.0. diff --git a/package.json b/package.json index c4d210d..2d6b794 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "bin/", "dist/", "templates/", + "docs/toml-binding.md", "README.md" ], "engines": { @@ -23,7 +24,8 @@ "format:check": "prettier . --check", "build": "npm run clean && tsc -p tsconfig.json", "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"", - "test": "npm run build && node --test test/binding.test.js test/cli.test.js test/init-commands.test.js test/init-template-assets.test.js test/toolchain.test.js", + "test": "npm run build && npm run test:runtime", + "test:runtime": "node --test test/toml.test.js test/binding.test.js test/cli.test.js test/init-commands.test.js test/init-template-assets.test.js test/toolchain.test.js", "test:templates": "npm run build && node --test test/template-types.test.js", "pack:check": "npm run build && npm pack --dry-run" }, diff --git a/src/project/binding.ts b/src/project/binding.ts index 62ad8dd..de05dd8 100644 --- a/src/project/binding.ts +++ b/src/project/binding.ts @@ -1,7 +1,6 @@ import { readFileSync } from 'node:fs'; -import { parse } from 'smol-toml'; -import type { TomlTable } from 'smol-toml'; import { CliError } from '../errors.js'; +import { parseToml } from './toml.js'; export type Framework = 'hardhat' | 'foundry'; export type Target = 'tron' | 'evm'; export interface Binding { @@ -15,21 +14,23 @@ export function readBinding(path: string): Binding { } catch (error) { throw new CliError(`cannot read ${path}: ${msg(error)}`, 4); } - let document: TomlTable; + let document: unknown; try { - document = parse(text); + document = parseToml(text); } catch (error) { throw new CliError(`invalid TOML in ${path}: ${msg(error)}`, 4); } - const project = document.project; - if (!project || typeof project !== 'object' || Array.isArray(project)) { + return validateBinding(document, path); +} +export function validateBinding(document: unknown, path: string): Binding { + const project = isTable(document) ? document.project : undefined; + if (!isTable(project)) { throw new CliError( `invalid project binding in ${path}; expected a [project] table`, 4, ); } - const framework = 'framework' in project ? project.framework : undefined; - const target = 'target' in project ? project.target : undefined; + const { framework, target } = project; if (framework !== 'hardhat' && framework !== 'foundry') { throw new CliError( `invalid framework in ${path}; expected hardhat or foundry`, @@ -41,6 +42,13 @@ export function readBinding(path: string): Binding { } return { framework, target }; } +function isTable(value: unknown): value is Record { + if (typeof value !== 'object' || value === null) { + return false; + } + const prototype: unknown = Object.getPrototypeOf(value); + return prototype === Object.prototype || prototype === null; +} function msg(error: unknown): string { return error instanceof Error ? error.message : String(error); } diff --git a/src/project/toml.ts b/src/project/toml.ts new file mode 100644 index 0000000..affb49a --- /dev/null +++ b/src/project/toml.ts @@ -0,0 +1,9 @@ +import { parse } from 'smol-toml'; + +export function parseToml(text: string): unknown { + return parse(text, { + integersAsBigInt: true, + // Node 20.11 does not provide Temporal. + useLegacyDate: true, + }); +} diff --git a/test/binding.test.js b/test/binding.test.js index 97bb798..5f41d80 100644 --- a/test/binding.test.js +++ b/test/binding.test.js @@ -4,7 +4,45 @@ import { tmpdir } from 'node:os'; import { resolve } from 'node:path'; import test from 'node:test'; import { CliError } from '../dist/errors.js'; -import { readBinding } from '../dist/project/binding.js'; +import { readBinding, validateBinding } from '../dist/project/binding.js'; + +test('Binding validation accepts plain parsed values without a TOML parser', () => { + for (const framework of ['hardhat', 'foundry']) { + for (const target of ['evm', 'tron']) { + assert.deepEqual( + validateBinding( + { project: { framework, target }, metadata: { value: 42n } }, + 'sunhat.toml', + ), + { framework, target }, + ); + } + } +}); + +test('Binding validation rejects malformed parsed project values', () => { + for (const document of [ + null, + [], + {}, + { project: null }, + { project: [] }, + { project: new Date() }, + { project: 'hardhat' }, + { project: { framework: 42n, target: 'evm' } }, + { project: { framework: 'hardhat', target: false } }, + ]) { + assert.throws( + () => validateBinding(document, 'sunhat.toml'), + (error) => { + assert.ok(error instanceof CliError); + assert.equal(error.exitCode, 4); + assert.doesNotMatch(error.message, /invalid TOML/u); + return true; + }, + ); + } +}); function fixture(t) { const root = mkdtempSync(resolve(tmpdir(), 'sunhat-binding-')); diff --git a/test/toml.test.js b/test/toml.test.js new file mode 100644 index 0000000..32c211f --- /dev/null +++ b/test/toml.test.js @@ -0,0 +1,55 @@ +import assert from 'node:assert/strict'; +import test from 'node:test'; +import { parseToml } from '../dist/project/toml.js'; + +test('TOML parsing does not require or validate a project binding', () => { + const document = parseToml("name = 'example'\nenabled = true"); + assert.equal(document.name, 'example'); + assert.equal(document.enabled, true); + const unbound = parseToml('[project]\nframework = 42\ntarget = false'); + assert.equal(unbound.project.framework, 42n); + assert.equal(unbound.project.target, false); +}); + +test('TOML 1.0 strings, dotted keys, tables, and arrays are parsed by the backend', () => { + const document = parseToml(`title = """ +first +second""" +project.framework = 'hardhat' +project.target = "evm" # target +metadata = { enabled = true, labels = ["one", "two"] } +[[servers]] +name = "local" +`); + assert.equal(document.title, 'first\nsecond'); + assert.equal(document.project.framework, 'hardhat'); + assert.equal(document.project.target, 'evm'); + assert.equal(document.metadata.enabled, true); + assert.deepEqual(document.metadata.labels, ['one', 'two']); + assert.equal(document.servers[0].name, 'local'); +}); + +test('TOML signed 64-bit integers are preserved without precision loss', () => { + const document = parseToml( + 'minimum = -9223372036854775808\nmaximum = 9223372036854775807', + ); + assert.equal(document.minimum, -9223372036854775808n); + assert.equal(document.maximum, 9223372036854775807n); +}); + +test('TOML date parsing works without a Temporal global', () => { + const document = parseToml('created = 1979-05-27T07:32:00Z'); + assert.ok(document.created instanceof Date); + assert.equal(document.created.toISOString(), '1979-05-27T07:32:00.000Z'); +}); + +for (const [name, text] of [ + ['duplicate keys', 'key = "one"\nkey = "two"'], + ['duplicate tables', '[metadata]\n[metadata]'], + ['missing values', 'key ='], + ['unterminated strings', 'key = "unterminated'], +]) { + test(`TOML parsing rejects ${name} without Binding validation`, () => { + assert.throws(() => parseToml(text)); + }); +} From ad937c1843885515233bd2ebce13879cadffacca Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 20:38:00 +0800 Subject: [PATCH 06/24] refactor: initialize Foundry toolchains from templates Install and verify Foundry during init using template-owned release data. Remove runtime digest checks, the check command, and unused binary hash records while keeping legacy locks readable. --- README.md | 16 +- src/adapters/foundry.ts | 29 +--- src/commands/init.ts | 24 ++- src/commands/toolchain.ts | 39 ++--- src/toolchain/releases.ts | 137 ++++++++++-------- templates/foundry/evm/README.md | 11 +- templates/foundry/evm/foundry-toolchain.json | 58 ++++++++ templates/foundry/evm/package.json | 6 - templates/foundry/tron/README.md | 11 +- templates/foundry/tron/foundry-toolchain.json | 58 ++++++++ templates/foundry/tron/package.json | 6 - test/cli.test.js | 40 +++-- test/fixtures/foundry-init.js | 42 ++++++ test/fixtures/toolchain-install-download.js | 4 +- test/fixtures/toolchain-install-loader.js | 16 +- test/init-commands.test.js | 90 ++++++++---- test/init-template-assets.test.js | 40 ++++- test/toolchain.test.js | 104 ++++++++++--- 18 files changed, 509 insertions(+), 222 deletions(-) create mode 100644 templates/foundry/evm/foundry-toolchain.json create mode 100644 templates/foundry/tron/foundry-toolchain.json create mode 100644 test/fixtures/foundry-init.js diff --git a/README.md b/README.md index 368d4b9..6f3fd15 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,8 @@ sunhat init --adopt . sunhat init --framework hardhat --adopt --target evm . ``` +For Foundry, initialization and adoption also download, verify, and install the selected toolchain. They require access to the configured GitHub release and `tar` on macOS/Linux or PowerShell on Windows. If installation fails, the generated project files are kept; enter the project directory and retry with `sunhat toolchain install`. + The binding file is the sole source of truth for command routing: ```toml @@ -89,12 +91,11 @@ Complete the project dependency installation above first. Hardhat must be declar ### Foundry projects: EVM and TRON -Install the project toolchain with `sunhat toolchain install` before running native commands. The installer requires access to the pinned GitHub release and `tar` on macOS/Linux or PowerShell on Windows. It supports macOS/Linux arm64 and x64, and Windows x64. +`sunhat init` installs and verifies the project toolchain before reporting success. Native commands then use that installation. The toolchain supports macOS/Linux arm64 and x64, and Windows x64. | Command | Purpose | Target | | ------------------------------------------ | ------------------------------------------------- | --------- | -| `sunhat toolchain install` | Download and verify the pinned project toolchain. | EVM, TRON | -| `sunhat toolchain check` | Verify the installed binary digests. | EVM, TRON | +| `sunhat toolchain install` | Retry or reinstall the configured toolchain. | EVM, TRON | | `sunhat toolchain info` | Print the installed toolchain metadata. | EVM, TRON | | `sunhat build [--sizes]` | Compile contracts and optionally report sizes. | EVM, TRON | | `sunhat test [-vvv]` | Run tests, optionally with verbose traces. | EVM, TRON | @@ -120,14 +121,15 @@ The target project must install Hardhat major version 2. The current template pi Hardhat TRON projects require a running Docker daemon. Their generated configuration selects the `tre` network, compiles with `tron-solc`, and starts `tronbox/tre:dev` automatically for `sunhat test`. Set `TRE_URL` and `TRE_PRIVATE_KEY` to use an existing TRE instance instead of the generated local defaults. -Hardhat dependencies use exact versions published on the npm registry. Sunhat's project dependency is pinned to `sunhat@2.0.0` by the installation step above. Foundry binaries are installed separately from pinned GitHub releases. In a Foundry project, install and check the toolchain with: +Hardhat dependencies use exact versions published on the npm registry. Sunhat's project dependency is pinned to `sunhat@2.0.0` by the installation step above. Foundry initialization installs the configured GitHub release automatically. Inspect the installed metadata with: ```bash -sunhat toolchain install -sunhat toolchain check +sunhat toolchain info ``` -EVM projects download `foundry-rs/foundry@v1.8.6`. TRON projects download the public release for `elsvv/foundry-tron@9ea07db4b342fd606f6f7c3f99be1757e90d5e90`. Sunhat verifies the archive against a pinned SHA-256 digest before extracting it to `.sunhat/toolchains/`, then verifies the selected binary's digest on every invocation. +Foundry release sources, versions, platform archives, executable names, and checksums live in `templates/foundry//foundry-toolchain.json`. Initialization copies the selected file into the project and uses it for installation. Existing projects without this file use the selected template's defaults. The installer verifies the archive before extracting it to `.sunhat/toolchains/`; native commands do not rehash binaries, probe their versions, or compare their release metadata with template defaults. New version-2 locks record executable paths without binary digests; existing version-1 locks remain readable. `toolchain info` prints installed metadata, and there is no separate `toolchain check` command. + +Compiler installation is handled by the framework on first compilation. In a Foundry project, run `sunhat build`: EVM projects resolve `solc`, while TRON projects resolve native `tron-solc`. Set `solc` in the project's `foundry.toml` to select a version or local executable. In a Hardhat project, install the declared npm dependencies, then run `npm run build`; compiler selection comes from `hardhat.config.ts`. Initialization installs the Foundry tools but does not predownload Solidity compilers. Installation stages all binaries on the project's toolchain filesystem before replacing an existing installation. The previous directory is kept until the new lock file is committed. If activation or lock replacement fails, Sunhat restores the previous directory; if restoration also fails, it retains the backup and reports its location. diff --git a/src/adapters/foundry.ts b/src/adapters/foundry.ts index ba41eef..870ab1f 100644 --- a/src/adapters/foundry.ts +++ b/src/adapters/foundry.ts @@ -1,16 +1,10 @@ -import { createHash } from 'node:crypto'; import { readFileSync, realpathSync } from 'node:fs'; import { resolve, sep } from 'node:path'; import { toolchainError } from '../errors.js'; import type { Target } from '../project/binding.js'; import { spawnNative } from '../process/spawn.js'; -import { releaseFor } from '../toolchain/releases.js'; type FoundryTool = 'forge' | 'cast' | 'anvil' | 'chisel'; -interface BinaryLock { - path: string; - sha256: string; -} export interface ToolchainLock { version: number; target: Target; @@ -18,7 +12,7 @@ export interface ToolchainLock { release: string; revision: string; platform: string; - binaries: Record; + binaries: Record; } export async function runFoundry( @@ -40,12 +34,6 @@ export async function runFoundry( ) { return toolchainError(`${tool} path escapes the project root`); } - const digest = sha256(executable); - if (digest !== binary.sha256) { - return toolchainError( - `${tool} digest mismatch: expected ${binary.sha256}, got ${digest}`, - ); - } return await spawnNative(executable, args, root); } @@ -59,21 +47,10 @@ export function loadToolchain(root: string, target: Target): ToolchainLock { 'Foundry toolchain is not installed; run `sunhat toolchain install`', ); } - const release = releaseFor(target); - if ( - lock.version !== 1 || - lock.target !== target || - lock.source !== release.source || - lock.release !== release.release || - lock.revision !== release.revision - ) { + if ((lock.version !== 1 && lock.version !== 2) || lock.target !== target) { return toolchainError( - `toolchain lock does not match ${release.source}@${release.revision}; reinstall it`, + `toolchain lock does not match the ${target} project; reinstall it`, ); } return lock; } - -export function sha256(path: string): string { - return createHash('sha256').update(readFileSync(path)).digest('hex'); -} diff --git a/src/commands/init.ts b/src/commands/init.ts index b80bd43..ca50975 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -11,6 +11,7 @@ import { parseArgs } from 'node:util'; import { CliError, usage } from '../errors.js'; import type { Framework, Target } from '../project/binding.js'; import { parseTarget } from '../cli/parser.js'; +import { installFoundry } from './toolchain.js'; interface InitOptions { framework: Framework; @@ -19,24 +20,39 @@ interface InitOptions { adopt: boolean; } const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); -export function initProject(argv: readonly string[]): number { +export async function initProject(argv: readonly string[]): Promise { const options = parseOptions(argv); - const { framework } = options; + const { framework, target } = options; const root = resolve(options.path); mkdirSync(root, { recursive: true }); if (existsSync(resolve(root, 'sunhat.toml'))) { return usage(`${root} is already bound by sunhat.toml`); } - const { target } = options; + const template = resolve(packageRoot, 'templates', framework, target); if (options.adopt) { validateNativeProject(root, framework); + const configuration = resolve(root, 'foundry-toolchain.json'); + if (framework === 'foundry' && !existsSync(configuration)) { + copyExclusive(resolve(template, 'foundry-toolchain.json'), configuration); + } copyExclusive( - resolve(packageRoot, 'templates', framework, target, 'sunhat.toml'), + resolve(template, 'sunhat.toml'), resolve(root, 'sunhat.toml'), ); } else { scaffold(root, framework, target); } + if (framework === 'foundry') { + try { + await installFoundry(root, target); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + throw new CliError( + `${message}; project files are in ${root}; retry with \`sunhat toolchain install\``, + error instanceof CliError ? error.exitCode : 6, + ); + } + } process.stderr.write( `${options.adopt ? 'adopted' : 'initialized'} ${framework}/${target} project at ${root}\n`, ); diff --git a/src/commands/toolchain.ts b/src/commands/toolchain.ts index 03021f2..b4a9571 100644 --- a/src/commands/toolchain.ts +++ b/src/commands/toolchain.ts @@ -8,11 +8,11 @@ import { rmSync, writeFileSync, } from 'node:fs'; -import { basename, resolve } from 'node:path'; +import { resolve } from 'node:path'; import { promisify } from 'node:util'; import { usage, toolchainError } from '../errors.js'; import type { Target } from '../project/binding.js'; -import { loadToolchain, sha256 } from '../adapters/foundry.js'; +import { loadToolchain } from '../adapters/foundry.js'; import { platformKey, releaseFor, releaseUrl } from '../toolchain/releases.js'; const execFileAsync = promisify(execFile); @@ -23,34 +23,24 @@ export async function toolchain( args: readonly string[], ): Promise { const command = args[0]; - if ( - !command || - args.length !== 1 || - !['install', 'check', 'info'].includes(command) - ) { - return usage( - 'toolchain requires exactly one command: install, check or info', - ); + if (!command || args.length !== 1 || !['install', 'info'].includes(command)) { + return usage('toolchain requires exactly one command: install or info'); } if (command === 'install') { - return await install(root, target); + return await installFoundry(root, target); } const lock = loadToolchain(root, target); - if (command === 'check') { - for (const [tool, item] of Object.entries(lock.binaries)) { - if (sha256(resolve(root, item.path)) !== item.sha256) { - return toolchainError(`${tool} digest mismatch`); - } - } - } process.stdout.write( `framework=foundry\ntarget=${target}\nsource=${lock.source}\nrelease=${lock.release}\nrevision=${lock.revision}\nplatform=${lock.platform}\n`, ); return 0; } -async function install(root: string, target: Target): Promise { - const release = releaseFor(target); +export async function installFoundry( + root: string, + target: Target, +): Promise { + const release = releaseFor(target, root); const url = releaseUrl(release); const response = await fetch(url, { redirect: 'follow' }); if (!response.ok) { @@ -86,19 +76,18 @@ async function install(root: string, target: Target): Promise { } const prepared = resolve(temporary, 'binaries'); mkdirSync(prepared); - const binaries: Record = {}; + const binaries: Record = {}; for (const [tool, filename] of Object.entries(release.tools)) { const source = resolve(extracted, filename); - const output = resolve(prepared, basename(filename)); + const output = resolve(prepared, filename); renameSync(source, output); chmodSync(output, 0o755); binaries[tool] = { - path: `.sunhat/toolchains/${target}/${basename(filename)}`, - sha256: sha256(output), + path: `.sunhat/toolchains/${target}/${filename}`, }; } const lock = { - version: 1, + version: 2, target, source: release.source, release: release.release, diff --git a/src/toolchain/releases.ts b/src/toolchain/releases.ts index 6820b31..95c40aa 100644 --- a/src/toolchain/releases.ts +++ b/src/toolchain/releases.ts @@ -1,5 +1,9 @@ +import { existsSync, readFileSync } from 'node:fs'; +import { basename, dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; import type { Target } from '../project/binding.js'; import { toolchainError } from '../errors.js'; + export interface Release { source: string; release: string; @@ -8,78 +12,83 @@ export interface Release { sha256: string; tools: Record<'forge' | 'cast' | 'anvil' | 'chisel', string>; } -type Platform = - | 'darwin-arm64' - | 'darwin-amd64' - | 'linux-arm64' - | 'linux-amd64' - | 'win32-amd64'; -const EVM_SHA: Record = { - 'darwin-arm64': - 'd6bc05ee937b4308bded496068728c8ba140abe49dd7527f37e025bc335b91ec', - 'darwin-amd64': - 'c0b032cdfda5fdce75ab6b782785f3f28aaf431bd55daecfb6437d01369f235e', - 'linux-arm64': - 'ca61f3f6e7d635f34e3e174409964d29126fa135794cd84cead8919dd50e0930', - 'linux-amd64': - '58850106984038f3a7200f38a4182c8cb423d3a4f4c7848eacbc2453e6bc35fc', - 'win32-amd64': - '924d6395786af438e7cb315f6835185f99d727ed6127dbbc4e6a62eb14edcfff', -}; -const TRON_SHA: Record = { - 'darwin-arm64': - 'b40d08504352475c937cc66bd69eacd35f9ac580abd55d5b294e5cbd0e23cf31', - 'darwin-amd64': - 'dc2c3f22ec2292885d41617105a5356946bf3efa1d9736ea5d5fd68b802a937a', - 'linux-arm64': - '4f2dbe50848d21708e44b2dde168298fa468d8fed0a6ebca0fe9e22ad0f0c27c', - 'linux-amd64': - '7d684c883b72cc407fef77eab90c9304b5bdd310a465f18e8fd199e595e04331', - 'win32-amd64': - 'c257cef8478334544521e3d6f1da58eaecc21ece8b404dea96831156d9979cc4', -}; -export function platformKey(): Platform { - const key = `${process.platform}-${process.arch === 'x64' ? 'amd64' : process.arch}`; - if (!(key in EVM_SHA)) { +interface ReleaseConfig extends Pick< + Release, + 'source' | 'release' | 'revision' +> { + target: Target; + platforms: Record>; +} +const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); + +export function platformKey(): string { + return `${process.platform}-${process.arch === 'x64' ? 'amd64' : process.arch}`; +} +export function releaseFor(target: Target, root?: string): Release { + const local = root ? resolve(root, 'foundry-toolchain.json') : undefined; + const path = + local && existsSync(local) + ? local + : resolve( + packageRoot, + 'templates', + 'foundry', + target, + 'foundry-toolchain.json', + ); + let config: ReleaseConfig; + try { + config = JSON.parse(readFileSync(path, 'utf8')) as ReleaseConfig; + } catch { + return toolchainError( + `cannot read Foundry toolchain configuration: ${path}`, + ); + } + if (!config || config.target !== target) { + return toolchainError( + `Foundry toolchain configuration target does not match ${target}: ${path}`, + ); + } + const artifact = config.platforms?.[platformKey()]; + if (!artifact) { return toolchainError( `unsupported Foundry platform ${process.platform}-${process.arch}`, ); } - return key as Platform; -} -export function releaseFor(target: Target): Release { - const platform = platformKey(); - const extension = platform.startsWith('win32') ? 'zip' : 'tar.gz'; - const executableExtension = platform.startsWith('win32') ? '.exe' : ''; - if (target === 'evm') { - return { - source: 'foundry-rs/foundry', - release: 'v1.8.6', - revision: 'v1.8.6', - archive: `foundry_v1.8.6_${platform.replace('-', '_')}.${extension}`, - sha256: EVM_SHA[platform], - tools: { - forge: `forge${executableExtension}`, - cast: `cast${executableExtension}`, - anvil: `anvil${executableExtension}`, - chisel: `chisel${executableExtension}`, - }, - }; + if ( + ![config.source, config.release, config.revision].every( + (value) => typeof value === 'string' && value.length > 0, + ) || + !isFilename(artifact.archive) || + typeof artifact.sha256 !== 'string' || + !/^[a-f0-9]{64}$/iu.test(artifact.sha256) || + !artifact.tools || + Object.keys(artifact.tools).length !== 4 || + !['forge', 'cast', 'anvil', 'chisel'].every((tool) => + isFilename(artifact.tools[tool as keyof Release['tools']]), + ) + ) { + return toolchainError(`invalid Foundry toolchain configuration: ${path}`); } return { - source: 'elsvv/foundry-tron', - release: 'foundry-tron-latest', - revision: '9ea07db4b342fd606f6f7c3f99be1757e90d5e90', - archive: `foundry-tron_${platform.replace('-', '_')}.${extension}`, - sha256: TRON_SHA[platform], - tools: { - forge: `forge-tron${executableExtension}`, - cast: `cast-tron${executableExtension}`, - anvil: `anvil-tron${executableExtension}`, - chisel: `chisel-tron${executableExtension}`, - }, + source: config.source, + release: config.release, + revision: config.revision, + archive: artifact.archive, + sha256: artifact.sha256.toLowerCase(), + tools: artifact.tools, }; } +function isFilename(value: unknown): value is string { + return ( + typeof value === 'string' && + value.length > 0 && + value !== '.' && + value !== '..' && + basename(value) === value && + !value.includes('\\') + ); +} export function releaseUrl(release: Release): string { return `https://github.com/${release.source}/releases/download/${release.release}/${release.archive}`; } diff --git a/templates/foundry/evm/README.md b/templates/foundry/evm/README.md index bc0a68f..3d046c7 100644 --- a/templates/foundry/evm/README.md +++ b/templates/foundry/evm/README.md @@ -11,7 +11,7 @@ npm install --global sunhat@2.0.0 sunhat --version ``` -Run project commands from this directory or a subdirectory. Install the project-pinned Foundry toolchain with `sunhat toolchain install` before building, testing, or using Cast, Anvil, or Chisel. Global Sunhat still uses the binaries in this project's `.sunhat/` directory. +Run project commands from this directory or a subdirectory. `sunhat init` has already installed the Foundry toolchain. Global Sunhat uses the binaries in this project's `.sunhat/` directory. The quick start also installs `sunhat@2.0.0` as an exact local development dependency. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. @@ -19,15 +19,15 @@ The quick start also installs `sunhat@2.0.0` as an exact local development depen ```bash npm install --save-dev --save-exact sunhat@2.0.0 -sunhat toolchain install -sunhat toolchain check npm run build npm test ``` The install command replaces the scaffold's `file:` Sunhat reference with the npm version and installs the project's other declared dependencies. -`toolchain install` downloads the Foundry release pinned by Sunhat and stores it under `.sunhat/toolchains/`. Subsequent commands verify the executable digest before running it. +`sunhat init` installs and verifies the release declared in `foundry-toolchain.json` and stores the binaries under `.sunhat/toolchains/`. Subsequent commands run the installed executables without rehashing them or probing their versions. If initialization reported an installation failure, retry with `sunhat toolchain install`. Use `toolchain info` to inspect installed metadata. + +The first `sunhat build` downloads the `solc` version required by the sources if it is not cached. To select the compiler explicitly, set `solc = "0.8.28"` under `[profile.default]` in `foundry.toml`. Initialization does not predownload the compiler. ## Commands @@ -45,8 +45,7 @@ The install command replaces the scaffold's `file:` Sunhat reference with the np | `sunhat cast ` | Run a Cast command through the selected toolchain. | | `sunhat anvil` | Start the project-pinned Anvil node. | | `sunhat chisel` | Start the project-pinned Solidity REPL. | -| `sunhat toolchain install` | Download and verify the pinned project toolchain. | +| `sunhat toolchain install` | Retry or reinstall the configured toolchain. | | `sunhat toolchain info` | Print the pinned toolchain metadata. | -| `sunhat toolchain check` | Verify the installed binary digests. | Arguments after the Sunhat command are passed to Foundry unchanged. diff --git a/templates/foundry/evm/foundry-toolchain.json b/templates/foundry/evm/foundry-toolchain.json new file mode 100644 index 0000000..b4c8a36 --- /dev/null +++ b/templates/foundry/evm/foundry-toolchain.json @@ -0,0 +1,58 @@ +{ + "target": "evm", + "source": "foundry-rs/foundry", + "release": "v1.8.6", + "revision": "v1.8.6", + "platforms": { + "darwin-arm64": { + "archive": "foundry_v1.8.6_darwin_arm64.tar.gz", + "sha256": "d6bc05ee937b4308bded496068728c8ba140abe49dd7527f37e025bc335b91ec", + "tools": { + "forge": "forge", + "cast": "cast", + "anvil": "anvil", + "chisel": "chisel" + } + }, + "darwin-amd64": { + "archive": "foundry_v1.8.6_darwin_amd64.tar.gz", + "sha256": "c0b032cdfda5fdce75ab6b782785f3f28aaf431bd55daecfb6437d01369f235e", + "tools": { + "forge": "forge", + "cast": "cast", + "anvil": "anvil", + "chisel": "chisel" + } + }, + "linux-arm64": { + "archive": "foundry_v1.8.6_linux_arm64.tar.gz", + "sha256": "ca61f3f6e7d635f34e3e174409964d29126fa135794cd84cead8919dd50e0930", + "tools": { + "forge": "forge", + "cast": "cast", + "anvil": "anvil", + "chisel": "chisel" + } + }, + "linux-amd64": { + "archive": "foundry_v1.8.6_linux_amd64.tar.gz", + "sha256": "58850106984038f3a7200f38a4182c8cb423d3a4f4c7848eacbc2453e6bc35fc", + "tools": { + "forge": "forge", + "cast": "cast", + "anvil": "anvil", + "chisel": "chisel" + } + }, + "win32-amd64": { + "archive": "foundry_v1.8.6_win32_amd64.zip", + "sha256": "924d6395786af438e7cb315f6835185f99d727ed6127dbbc4e6a62eb14edcfff", + "tools": { + "forge": "forge.exe", + "cast": "cast.exe", + "anvil": "anvil.exe", + "chisel": "chisel.exe" + } + } + } +} diff --git a/templates/foundry/evm/package.json b/templates/foundry/evm/package.json index d1e06a3..1e9eabc 100644 --- a/templates/foundry/evm/package.json +++ b/templates/foundry/evm/package.json @@ -8,11 +8,5 @@ }, "devDependencies": { "sunhat": "{{sunhatDependency}}" - }, - "sunhat": { - "foundryToolchain": { - "target": "evm", - "source": "foundry-rs/foundry" - } } } diff --git a/templates/foundry/tron/README.md b/templates/foundry/tron/README.md index 119255f..25ec1ba 100644 --- a/templates/foundry/tron/README.md +++ b/templates/foundry/tron/README.md @@ -11,7 +11,7 @@ npm install --global sunhat@2.0.0 sunhat --version ``` -Run project commands from this directory or a subdirectory. Install the project-pinned Foundry-TRON toolchain with `sunhat toolchain install` before building, testing, or using Cast. Global Sunhat still uses the binaries in this project's `.sunhat/` directory. Anvil and Chisel are unavailable for TRON. +Run project commands from this directory or a subdirectory. `sunhat init` has already installed the Foundry-TRON toolchain. Global Sunhat uses the binaries in this project's `.sunhat/` directory. Anvil and Chisel are unavailable for TRON. The quick start also installs `sunhat@2.0.0` as an exact local development dependency. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. @@ -19,15 +19,13 @@ The quick start also installs `sunhat@2.0.0` as an exact local development depen ```bash npm install --save-dev --save-exact sunhat@2.0.0 -sunhat toolchain install -sunhat toolchain check npm run build npm test ``` The install command replaces the scaffold's `file:` Sunhat reference with the npm version and installs the project's other declared dependencies. -`toolchain install` downloads the Foundry-TRON release pinned by Sunhat and stores it under `.sunhat/toolchains/`. Subsequent commands verify the executable digest before running it. +`sunhat init` installs and verifies the release declared in `foundry-toolchain.json` and stores the binaries under `.sunhat/toolchains/`. Subsequent commands run the installed executables without rehashing them or probing their versions. If initialization reported an installation failure, retry with `sunhat toolchain install`. Use `toolchain info` to inspect installed metadata. ## Commands @@ -44,9 +42,8 @@ The install command replaces the scaffold's `file:` Sunhat reference with the np | `sunhat script ` | Run a Foundry script. | | `sunhat create ` | Deploy a contract through the TRON transaction path. | | `sunhat cast ` | Run a Cast command through Foundry-TRON. | -| `sunhat toolchain install` | Download and verify the pinned project toolchain. | +| `sunhat toolchain install` | Retry or reinstall the configured toolchain. | | `sunhat toolchain info` | Print the pinned toolchain metadata. | -| `sunhat toolchain check` | Verify the installed binary digests. | Arguments after the Sunhat command are passed to Foundry-TRON unchanged. @@ -61,4 +58,4 @@ sunhat build sunhat test ``` -TRON builds use the native `tron-solc` resolved by Foundry-TRON. `anvil` and `chisel` are unavailable for this target. +The first `sunhat build` downloads native `tron-solc` through Foundry-TRON. The current toolchain defaults to `0.8.28` and caches it under `~/.foundry-tron/solc/`. Set `solc` under `[profile.default]` in `foundry.toml` to select a version or local executable. Initialization does not predownload the compiler. `anvil` and `chisel` are unavailable for this target. diff --git a/templates/foundry/tron/foundry-toolchain.json b/templates/foundry/tron/foundry-toolchain.json new file mode 100644 index 0000000..f644d49 --- /dev/null +++ b/templates/foundry/tron/foundry-toolchain.json @@ -0,0 +1,58 @@ +{ + "target": "tron", + "source": "elsvv/foundry-tron", + "release": "foundry-tron-latest", + "revision": "9ea07db4b342fd606f6f7c3f99be1757e90d5e90", + "platforms": { + "darwin-arm64": { + "archive": "foundry-tron_darwin_arm64.tar.gz", + "sha256": "b40d08504352475c937cc66bd69eacd35f9ac580abd55d5b294e5cbd0e23cf31", + "tools": { + "forge": "forge-tron", + "cast": "cast-tron", + "anvil": "anvil-tron", + "chisel": "chisel-tron" + } + }, + "darwin-amd64": { + "archive": "foundry-tron_darwin_amd64.tar.gz", + "sha256": "dc2c3f22ec2292885d41617105a5356946bf3efa1d9736ea5d5fd68b802a937a", + "tools": { + "forge": "forge-tron", + "cast": "cast-tron", + "anvil": "anvil-tron", + "chisel": "chisel-tron" + } + }, + "linux-arm64": { + "archive": "foundry-tron_linux_arm64.tar.gz", + "sha256": "4f2dbe50848d21708e44b2dde168298fa468d8fed0a6ebca0fe9e22ad0f0c27c", + "tools": { + "forge": "forge-tron", + "cast": "cast-tron", + "anvil": "anvil-tron", + "chisel": "chisel-tron" + } + }, + "linux-amd64": { + "archive": "foundry-tron_linux_amd64.tar.gz", + "sha256": "7d684c883b72cc407fef77eab90c9304b5bdd310a465f18e8fd199e595e04331", + "tools": { + "forge": "forge-tron", + "cast": "cast-tron", + "anvil": "anvil-tron", + "chisel": "chisel-tron" + } + }, + "win32-amd64": { + "archive": "foundry-tron_win32_amd64.zip", + "sha256": "c257cef8478334544521e3d6f1da58eaecc21ece8b404dea96831156d9979cc4", + "tools": { + "forge": "forge-tron.exe", + "cast": "cast-tron.exe", + "anvil": "anvil-tron.exe", + "chisel": "chisel-tron.exe" + } + } + } +} diff --git a/templates/foundry/tron/package.json b/templates/foundry/tron/package.json index 1c59f4a..1e9eabc 100644 --- a/templates/foundry/tron/package.json +++ b/templates/foundry/tron/package.json @@ -8,11 +8,5 @@ }, "devDependencies": { "sunhat": "{{sunhatDependency}}" - }, - "sunhat": { - "foundryToolchain": { - "target": "tron", - "source": "elsvv/foundry-tron" - } } } diff --git a/test/cli.test.js b/test/cli.test.js index 61c16f7..a2dfa4a 100644 --- a/test/cli.test.js +++ b/test/cli.test.js @@ -1,5 +1,4 @@ import assert from 'node:assert/strict'; -import { createHash } from 'node:crypto'; import { chmodSync, mkdirSync, @@ -11,13 +10,18 @@ import { tmpdir } from 'node:os'; import { dirname, resolve } from 'node:path'; import { spawnSync } from 'node:child_process'; import test from 'node:test'; +import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; const cli = resolve('bin/sunhat.js'); function temp(name) { return mkdtempSync(resolve(tmpdir(), `sunhat-${name}-`)); } function run(cwd, args) { - return spawnSync(process.execPath, [cli, ...args], { cwd, encoding: 'utf8' }); + return spawnSync( + process.execPath, + [...(args[0] === 'init' ? foundryInitArgs : []), cli, ...args], + { cwd, encoding: 'utf8', env: { ...process.env, ...foundryInitEnv } }, + ); } function json(path, value) { mkdirSync(dirname(path), { recursive: true }); @@ -61,11 +65,10 @@ function foundry(root, target) { ); binaries[tool] = { path: `.sunhat/toolchains/${target}/${tool}`, - sha256: createHash('sha256').update(readFileSync(path)).digest('hex'), }; } json(resolve(root, '.sunhat/toolchain.json'), { - version: 1, + version: 2, target, source: target === 'evm' ? 'foundry-rs/foundry' : 'elsvv/foundry-tron', release: target === 'evm' ? 'v1.8.6' : 'foundry-tron-latest', @@ -99,6 +102,9 @@ test('init defaults to Foundry and TRON', () => { ); const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); assert.match(readme, /Foundry TRON Project with Sunhat/u); + const build = run(root, ['build']); + assert.equal(build.status, 0, build.stderr); + assert.equal(build.stdout, '["build"]'); }); test('init accepts an explicit Foundry EVM target', () => { const root = temp('explicit-foundry'); @@ -122,6 +128,9 @@ test('init accepts an explicit Foundry EVM target', () => { const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); assert.match(readme, /Foundry EVM Project with Sunhat/u); assert.doesNotMatch(readme, /network = "tron"/u); + const build = run(root, ['build']); + assert.equal(build.status, 0, build.stderr); + assert.equal(build.stdout, '["build"]'); }); test('Hardhat scaffold requires explicit framework and refuses overwrite', () => { const root = temp('init'); @@ -264,7 +273,10 @@ test('foundry scaffold does not reference unpublished placeholder packages', () assert.equal(result.status, 0, result.stderr); const pkg = readFileSync(resolve(root, 'package.json'), 'utf8'); assert.doesNotMatch(pkg, /@sunhat\/foundry-tron-toolchain/u); - assert.match(pkg, /elsvv\/foundry-tron/u); + assert.match( + readFileSync(resolve(root, 'foundry-toolchain.json'), 'utf8'), + /elsvv\/foundry-tron/u, + ); assert.doesNotMatch( readFileSync(resolve(root, 'script/Counter.s.sol'), 'utf8'), /forge-std/u, @@ -365,12 +377,22 @@ test('Hardhat 3 is rejected with resolved version', () => { assert.equal(result.status, 3); assert.match(result.stderr, /Hardhat 2.*3\.0\.0/u); }); -test('tampered toolchain binary is rejected', () => { +test('Foundry accepts a legacy lock without comparing its recorded digest', () => { const root = temp('digest'); binding(root, 'foundry', 'evm'); foundry(root, 'evm'); - writeFileSync(resolve(root, '.sunhat/toolchains/evm/forge'), 'tampered'); + const lockPath = resolve(root, '.sunhat/toolchain.json'); + const lock = JSON.parse(readFileSync(lockPath, 'utf8')); + lock.version = 1; + for (const binary of Object.values(lock.binaries)) { + binary.sha256 = '0'.repeat(64); + } + json(lockPath, lock); + executable( + resolve(root, '.sunhat/toolchains/evm/forge'), + `process.stdout.write('updated:'+JSON.stringify(process.argv.slice(2)));`, + ); const result = run(root, ['build']); - assert.equal(result.status, 3); - assert.match(result.stderr, /digest mismatch/u); + assert.equal(result.status, 0, result.stderr); + assert.equal(result.stdout, 'updated:["build"]'); }); diff --git a/test/fixtures/foundry-init.js b/test/fixtures/foundry-init.js new file mode 100644 index 0000000..28651a5 --- /dev/null +++ b/test/fixtures/foundry-init.js @@ -0,0 +1,42 @@ +import { execFileSync } from 'node:child_process'; +import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { resolve } from 'node:path'; +import { after } from 'node:test'; + +const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-init-archive-')); +after(() => rmSync(temporary, { recursive: true, force: true })); +const source = resolve(temporary, 'source'); +mkdirSync(source); +const windows = process.platform === 'win32'; +const archive = resolve(temporary, windows ? 'tools.zip' : 'tools.tar.gz'); +const files = []; +for (const tool of ['forge', 'cast', 'anvil', 'chisel']) { + for (const suffix of ['', '-tron']) { + const filename = `${tool}${suffix}${windows ? '.exe' : ''}`; + writeFileSync( + resolve(source, filename), + `#!/usr/bin/env node\nprocess.stdout.write(JSON.stringify(process.argv.slice(2)));\n`, + ); + files.push(filename); + } +} +if (windows) { + const literal = (value) => `'${value.replaceAll("'", "''")}'`; + execFileSync('powershell.exe', [ + '-NoProfile', + '-Command', + `$ErrorActionPreference = 'Stop'; Compress-Archive -LiteralPath @(${files.map((name) => literal(resolve(source, name))).join(', ')}) -DestinationPath ${literal(archive)}`, + ]); +} else { + execFileSync('tar', ['-czf', archive, '-C', source, ...files]); +} + +export const foundryInitArgs = [ + '--no-warnings', + '--experimental-loader', + new URL('./toolchain-install-loader.js', import.meta.url).href, + '--import', + new URL('./toolchain-install-download.js', import.meta.url).href, +]; +export const foundryInitEnv = { SUNHAT_TEST_ARCHIVE: archive }; diff --git a/test/fixtures/toolchain-install-download.js b/test/fixtures/toolchain-install-download.js index 4f40e3a..42b76eb 100644 --- a/test/fixtures/toolchain-install-download.js +++ b/test/fixtures/toolchain-install-download.js @@ -1,6 +1,8 @@ import { readFileSync, writeFileSync } from 'node:fs'; globalThis.fetch = async (url) => { - writeFileSync(process.env.SUNHAT_TEST_DOWNLOAD_LOG, String(url)); + if (process.env.SUNHAT_TEST_DOWNLOAD_LOG) { + writeFileSync(process.env.SUNHAT_TEST_DOWNLOAD_LOG, String(url)); + } return new Response(readFileSync(process.env.SUNHAT_TEST_ARCHIVE)); }; diff --git a/test/fixtures/toolchain-install-loader.js b/test/fixtures/toolchain-install-loader.js index 2f28e79..e36b30a 100644 --- a/test/fixtures/toolchain-install-loader.js +++ b/test/fixtures/toolchain-install-loader.js @@ -1,8 +1,16 @@ import { createHash } from 'node:crypto'; import { readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { pathToFileURL } from 'node:url'; -const releasesUrl = new URL('../../dist/toolchain/releases.js', import.meta.url) - .href; +const releasesUrl = process.env.SUNHAT_TEST_PACKAGE_ROOT + ? pathToFileURL( + resolve( + process.env.SUNHAT_TEST_PACKAGE_ROOT, + 'dist/toolchain/releases.js', + ), + ).href + : new URL('../../dist/toolchain/releases.js', import.meta.url).href; // Keep the production release names and binary mapping. Only replace the archive // digest so installation can verify a small, locally generated archive offline. @@ -20,8 +28,8 @@ export async function load(url, context, nextLoad) { import * as original from ${JSON.stringify(`${releasesUrl}?original`)}; export const platformKey = original.platformKey; export const releaseUrl = original.releaseUrl; - export function releaseFor(target) { - return { ...original.releaseFor(target), sha256: ${JSON.stringify(digest)} }; + export function releaseFor(target, root) { + return { ...original.releaseFor(target, root), sha256: ${JSON.stringify(digest)} }; } `, }; diff --git a/test/init-commands.test.js b/test/init-commands.test.js index 12c8375..c59589b 100644 --- a/test/init-commands.test.js +++ b/test/init-commands.test.js @@ -1,5 +1,4 @@ import assert from 'node:assert/strict'; -import { createHash } from 'node:crypto'; import { chmodSync, existsSync, @@ -16,6 +15,7 @@ import { dirname, resolve } from 'node:path'; import { spawnSync } from 'node:child_process'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; +import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); const cli = resolve(repository, 'bin/sunhat.js'); @@ -93,12 +93,17 @@ const forgeCommands = [ ]; function run(cwd, args, { env = {}, preload = false } = {}) { - const nodeArgs = preload ? ['--import', downloadFixture] : []; + const nodeArgs = [ + ...(args[0] === 'init' || (args[0] === 'toolchain' && args[1] === 'install') + ? foundryInitArgs + : []), + ...(preload ? ['--import', downloadFixture] : []), + ]; return spawnSync(process.execPath, [...nodeArgs, cli, ...args], { cwd, encoding: 'utf8', timeout: 10_000, - env: { ...process.env, ...env }, + env: { ...process.env, ...foundryInitEnv, ...env }, }); } @@ -186,13 +191,10 @@ function installFrameworkFixture(project) { recorder(resolve(project.root, path), project, tool); binaries[tool] = { path, - sha256: createHash('sha256') - .update(readFileSync(resolve(project.root, path))) - .digest('hex'), }; } json(resolve(project.root, '.sunhat/toolchain.json'), { - version: 1, + version: 2, target: project.target, ...releases[project.target], platform: 'test', @@ -361,20 +363,19 @@ for (const framework of ['foundry', 'hardhat']) { if (framework === 'foundry') { await t.test( - 'toolchain info/check use the initialized target without launching Forge', + 'toolchain info uses the initialized target without launching Forge', () => { const before = initialized.calls().length; - for (const command of ['info', 'check']) { - const result = run(initialized.nested, ['toolchain', command]); - assert.equal(result.status, 0, result.stderr); - assert.equal( - result.stdout, - `framework=foundry\ntarget=${target}\nsource=${releases[target].source}\nrelease=${releases[target].release}\nrevision=${releases[target].revision}\nplatform=test\n`, - ); - } + const info = run(initialized.nested, ['toolchain', 'info']); + assert.equal(info.status, 0, info.stderr); + assert.equal( + info.stdout, + `framework=foundry\ntarget=${target}\nsource=${releases[target].source}\nrelease=${releases[target].release}\nrevision=${releases[target].revision}\nplatform=test\n`, + ); for (const args of [ [], ['unknown'], + ['check'], ['check', '--extra'], ['install', 'extra'], ]) { @@ -408,7 +409,7 @@ for (const framework of ['foundry', 'hardhat']) { } await t.test( - 'toolchain check and native execution reject a tampered binary', + 'native execution uses the current installed executable', () => { const before = initialized.calls().length; const lock = JSON.parse( @@ -417,16 +418,21 @@ for (const framework of ['foundry', 'hardhat']) { 'utf8', ), ); + const executable = resolve( + initialized.root, + lock.binaries.forge.path, + ); writeFileSync( - resolve(initialized.root, lock.binaries.forge.path), - 'tampered', + executable, + `${readFileSync(executable, 'utf8')}\n// changed after installation\n`, ); - for (const args of [['toolchain', 'check'], ['build']]) { - const result = run(initialized.nested, args); - assert.equal(result.status, 3, result.stderr); - assert.match(result.stderr, /digest mismatch/u); - } - assert.equal(initialized.calls().length, before); + const result = run(initialized.nested, ['build']); + assert.equal(result.status, 0, result.stderr); + assert.deepEqual( + JSON.parse(result.stdout), + expectedCall(initialized, 'forge', ['build']), + ); + assert.equal(initialized.calls().length, before + 1); }, ); } @@ -435,14 +441,36 @@ for (const framework of ['foundry', 'hardhat']) { } for (const target of ['evm', 'tron']) { + test(`init foundry/${target}: failed initialization reports a recoverable install error`, (t) => { + const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-init-failure-')); + t.after(() => rmSync(temporary, { recursive: true, force: true })); + const root = resolve(temporary, 'project'); + const initialized = run(temporary, ['init', '--target', target, root], { + preload: true, + env: { + SUNHAT_TEST_DOWNLOAD: 'digest-mismatch', + SUNHAT_TEST_DOWNLOAD_LOG: resolve(temporary, 'download.txt'), + }, + }); + assert.equal(initialized.status, 3, initialized.stderr); + assert.match(initialized.stderr, /archive digest mismatch/u); + assert.match(initialized.stderr, /retry with `sunhat toolchain install`/u); + assert.ok(existsSync(resolve(root, 'sunhat.toml'))); + assert.equal(existsSync(resolve(root, '.sunhat/toolchain.json')), false); + const retried = run(root, ['toolchain', 'install']); + assert.equal(retried.status, 0, retried.stderr); + const build = run(root, ['build']); + assert.equal(build.status, 0, build.stderr); + assert.equal(build.stdout, '["build"]'); + }); test(`init foundry/${target}: toolchain install download failures`, async (t) => { const initialized = project(t, 'foundry', target); - await t.test('check/info/build report a missing toolchain', () => { - for (const args of [ - ['toolchain', 'check'], - ['toolchain', 'info'], - ['build'], - ]) { + rmSync(resolve(initialized.root, '.sunhat'), { + recursive: true, + force: true, + }); + await t.test('info/build report a missing toolchain', () => { + for (const args of [['toolchain', 'info'], ['build']]) { const result = run(initialized.nested, args); assert.equal(result.status, 3, result.stderr); assert.match(result.stderr, /toolchain is not installed/u); diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js index 6e8cc6b..0d20ba5 100644 --- a/test/init-template-assets.test.js +++ b/test/init-template-assets.test.js @@ -15,6 +15,7 @@ import { tmpdir } from 'node:os'; import { basename, dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; +import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); @@ -47,11 +48,20 @@ function json(path, value) { } function run(fixture, args) { - return spawnSync(process.execPath, [fixture.cli, 'init', ...args], { - cwd: fixture.temporary, - encoding: 'utf8', - timeout: 10_000, - }); + return spawnSync( + process.execPath, + [...foundryInitArgs, fixture.cli, 'init', ...args], + { + cwd: fixture.temporary, + encoding: 'utf8', + timeout: 10_000, + env: { + ...process.env, + ...foundryInitEnv, + SUNHAT_TEST_PACKAGE_ROOT: fixture.packageRoot, + }, + }, + ); } for (const framework of ['hardhat', 'foundry']) { @@ -72,6 +82,15 @@ for (const framework of ['hardhat', 'foundry']) { manifest.devDependencies['@types/node'] = '22.10.2'; manifest.scripts.typecheck = 'tsc --noEmit'; json(resolve(variant, 'package.json'), manifest); + let toolchain; + if (framework === 'foundry') { + toolchain = JSON.parse( + readFileSync(resolve(variant, 'foundry-toolchain.json')), + ); + toolchain.release = 'template-release'; + toolchain.revision = 'template-revision'; + json(resolve(variant, 'foundry-toolchain.json'), toolchain); + } const native = framework === 'hardhat' ? 'hardhat.config.ts' : 'foundry.toml'; @@ -118,6 +137,17 @@ for (const framework of ['hardhat', 'foundry']) { ); assert.equal(generated.devDependencies['@types/node'], '22.10.2'); assert.equal(generated.scripts.typecheck, 'tsc --noEmit'); + if (toolchain) { + assert.deepEqual( + JSON.parse(readFileSync(resolve(project, 'foundry-toolchain.json'))), + toolchain, + ); + const installed = JSON.parse( + readFileSync(resolve(project, '.sunhat/toolchain.json')), + ); + assert.equal(installed.release, 'template-release'); + assert.equal(installed.revision, 'template-revision'); + } assert.equal( readFileSync(resolve(project, native), 'utf8'), customizedConfig, diff --git a/test/toolchain.test.js b/test/toolchain.test.js index bdd8c2a..d0e1da9 100644 --- a/test/toolchain.test.js +++ b/test/toolchain.test.js @@ -1,6 +1,5 @@ import assert from 'node:assert/strict'; import { spawnSync } from 'node:child_process'; -import { createHash } from 'node:crypto'; import { existsSync, mkdirSync, @@ -17,7 +16,7 @@ import { tmpdir } from 'node:os'; import { resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; -import { releaseFor } from '../dist/toolchain/releases.js'; +import { platformKey, releaseFor } from '../dist/toolchain/releases.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); const cli = resolve(repository, 'bin/sunhat.js'); @@ -35,6 +34,56 @@ const faults = new URL( ).href; const tools = ['forge', 'cast', 'anvil', 'chisel']; +for (const [name, modify] of [ + [ + 'target mismatch', + (config) => { + config.target = 'tron'; + }, + ], + [ + 'archive path traversal', + (config) => { + config.platforms[platformKey()].archive = '../tools.tar.gz'; + }, + ], + [ + 'binary path traversal', + (config) => { + config.platforms[platformKey()].tools.forge = '../forge'; + }, + ], + [ + 'invalid checksum', + (config) => { + config.platforms[platformKey()].sha256 = 'not-a-sha256'; + }, + ], +]) { + test(`toolchain configuration rejects ${name} before installation`, (t) => { + const root = mkdtempSync(resolve(tmpdir(), 'sunhat-toolchain-config-')); + t.after(() => rmSync(root, { recursive: true, force: true })); + const config = JSON.parse( + readFileSync( + resolve(repository, 'templates/foundry/evm/foundry-toolchain.json'), + ), + ); + modify(config); + writeFileSync( + resolve(root, 'foundry-toolchain.json'), + JSON.stringify(config), + ); + assert.throws( + () => releaseFor('evm', root), + (error) => { + assert.equal(error.exitCode, 3); + assert.match(error.message, /configuration/u); + return true; + }, + ); + }); +} + function releaseOn(target, platform, arch) { const platformDescriptor = Object.getOwnPropertyDescriptor( process, @@ -114,8 +163,26 @@ function installFixture(t, target, directory = tmpdir()) { writeArchive(fixture); const initialized = spawnSync( process.execPath, - [cli, 'init', '--target', target, fixture.root], - { encoding: 'utf8', timeout: 10_000 }, + [ + '--experimental-loader', + loader, + '--import', + download, + cli, + 'init', + '--target', + target, + fixture.root, + ], + { + encoding: 'utf8', + timeout: 30_000, + env: { + ...process.env, + SUNHAT_TEST_ARCHIVE: fixture.archive, + SUNHAT_TEST_DOWNLOAD_LOG: fixture.log, + }, + }, ); assert.equal( initialized.status, @@ -181,7 +248,7 @@ function assertPreserved(root, previous) { assert.deepEqual(readFileSync(resolve(root, path)), bytes); } assertInstalled( - spawnSync(process.execPath, [cli, 'toolchain', 'check'], { + spawnSync(process.execPath, [cli, 'toolchain', 'info'], { cwd: root, encoding: 'utf8', timeout: 10_000, @@ -220,7 +287,7 @@ for (const target of ['evm', 'tron']) { }); } - test(`${process.platform} ${target} archive installs all executables and verifies the lock`, (t) => { + test(`${process.platform} ${target} archive installs all executables and records metadata`, (t) => { const windows = process.platform === 'win32'; const fixture = installFixture(t, target); const { root, log, contents } = fixture; @@ -233,7 +300,7 @@ for (const target of ['evm', 'tron']) { const lock = JSON.parse( readFileSync(resolve(root, '.sunhat/toolchain.json'), 'utf8'), ); - assert.equal(lock.version, 1); + assert.equal(lock.version, 2); assert.equal(lock.target, target); assert.equal( lock.platform, @@ -254,10 +321,7 @@ for (const target of ['evm', 'tron']) { readFileSync(resolve(root, item.path)), contents[filename], ); - assert.equal( - item.sha256, - createHash('sha256').update(contents[filename]).digest('hex'), - ); + assert.deepEqual(Object.keys(item), ['path']); if (windows) { assert.equal( existsSync( @@ -270,18 +334,13 @@ for (const target of ['evm', 'tron']) { ); } } - const checked = spawnSync(process.execPath, [cli, 'toolchain', 'check'], { + const info = spawnSync(process.execPath, [cli, 'toolchain', 'info'], { cwd: root, encoding: 'utf8', timeout: 10_000, }); - assert.equal( - checked.status, - 0, - checked.stderr || String(checked.error ?? ''), - ); + assert.equal(info.status, 0, info.stderr || String(info.error ?? '')); assertClean(root, target); - writeFileSync(resolve(root, lock.binaries.forge.path), 'tampered'); const rejected = spawnSync(process.execPath, [cli, 'toolchain', 'check'], { cwd: root, encoding: 'utf8', @@ -289,10 +348,13 @@ for (const target of ['evm', 'tron']) { }); assert.equal( rejected.status, - 3, + 2, rejected.stderr || String(rejected.error ?? ''), ); - assert.match(rejected.stderr, /forge digest mismatch/u); + assert.match( + rejected.stderr, + /toolchain requires exactly one command: install or info/u, + ); }); test(`${target} reinstall works across simulated filesystem boundaries`, (t) => { @@ -302,7 +364,7 @@ for (const target of ['evm', 'tron']) { writeArchive(fixture, { label: 'replacement' }); assertInstalled(install(fixture, 'cross-device')); const installed = snapshot(fixture.root); - assert.notDeepEqual(installed.lock, previous.lock); + assert.deepEqual(installed.lock, previous.lock); for (const [path, bytes] of Object.entries(installed.binaries)) { assert.notDeepEqual(bytes, previous.binaries[path]); assert.deepEqual(bytes, fixture.contents[path.split('/').at(-1)]); From d42431348d5c3c2e1f9d3cb1df9d63f15a778af7 Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 20:55:12 +0800 Subject: [PATCH 07/24] docs: rewrite Sunhat 2 overview and add QuickStart guide --- README.md | 156 ++++--------------------- docs/QuickStart.md | 195 +++++++++++++++++++++++++++++++ package.json | 1 + templates/foundry/evm/README.md | 8 +- templates/foundry/tron/README.md | 8 +- templates/hardhat/evm/README.md | 8 +- templates/hardhat/tron/README.md | 10 +- 7 files changed, 237 insertions(+), 149 deletions(-) create mode 100644 docs/QuickStart.md diff --git a/README.md b/README.md index 6f3fd15..5c9b8df 100644 --- a/README.md +++ b/README.md @@ -1,155 +1,47 @@ -# Sunhat +# Sunhat 2 -Sunhat's npm package is `sunhat`; these instructions use version `2.0.0`. It binds a project to Hardhat 2 or Foundry and to an EVM or TRON target through `sunhat.toml`. It handles project initialization, binding, command routing, and child-process management without replacing the framework's compiler, test runner, or argument parser. +Sunhat 2 is a project CLI for Hardhat 2 and Foundry on EVM and TRON. It selects the framework and target from `sunhat.toml`, then runs the project's native tools. The npm package is `@sun-protocol/sunhat`; the executable is `sunhat`. -## Global command prerequisites +## Version policy -To run `sunhat ...` directly in a terminal, install `sunhat@2.0.0` from npm globally and ensure npm's global executable directory is on `PATH`. The CLI requires Node.js `>=20.11`. +**Sunhat 1.x is maintenance-only.** It receives bug fixes and security updates, with no new features. New development targets Sunhat 2. Existing projects can keep their pinned 1.x dependency while planning migration; the [v1 documentation snapshot](https://github.com/sun-protocol/sunhat/blob/f583526/README.md) remains available. -```bash -npm install --global sunhat@2.0.0 -sunhat --version -sunhat --help -``` - -`sunhat --version` should report `sunhat 2.0.0`. Global installation is a separate step; `sunhat init` does not perform it. - -These commands are available without a project binding: - -| Command | Purpose | -| -------------------------------------- | ------------------------------------------------------------- | -| `sunhat`, `sunhat --help`, `sunhat -h` | Print CLI usage and initialization defaults. | -| `sunhat --version`, `sunhat -V` | Print the version of the invoked Sunhat executable. | -| `sunhat init [options] [path]` | Create a project, or bind an existing project with `--adopt`. | - -All other commands require a valid `sunhat.toml` in the current directory or an ancestor. Run them from the project root or one of its subdirectories. Global Sunhat still resolves Hardhat from the project's dependencies and Foundry from the project's `.sunhat/` toolchain; global installation does not install either framework for the project. - -Install `sunhat@2.0.0` as an exact local development dependency using the project setup steps below. Then use `npx --no-install sunhat ...` to run that local copy without a global installation. The examples below use the global `sunhat` command; replace it with `npx --no-install sunhat` for local use. `npm run build` and `npm test` resolve the local executable automatically. - -The global CLI does not automatically delegate to the project's local Sunhat copy. Use `sunhat --version` and `npx --no-install sunhat --version` to check which CLI version each invocation uses. - -## Initialize or adopt a project - -New projects use Foundry and the TRON target by default. Pass `--framework hardhat` to select Hardhat, or `--target evm` to select an EVM target: - -```bash -sunhat init contracts -sunhat init --target evm contracts-evm -sunhat init --framework hardhat hardhat-tron -sunhat init --framework hardhat --target evm hardhat-evm -``` - -Adopting an existing project does not modify its native configuration. Adoption also defaults to the TRON target; pass `--target evm` explicitly for an EVM project: - -```bash -sunhat init --adopt . -sunhat init --framework hardhat --adopt --target evm . -``` - -For Foundry, initialization and adoption also download, verify, and install the selected toolchain. They require access to the configured GitHub release and `tar` on macOS/Linux or PowerShell on Windows. If installation fails, the generated project files are kept; enter the project directory and retry with `sunhat toolchain install`. - -The binding file is the sole source of truth for command routing: - -```toml -[project] -framework = "hardhat" -target = "evm" -``` +## What changed from v1 -Write bindings using TOML 1.0.0 syntax. The parser backend is pinned to `smol-toml@1.9.1`; it also accepts newer syntax and has known conformance exceptions. Sunhat does not promise TOML 1.1 support or strict rejection of everything outside 1.0. See [the parser decision and compatibility limits](docs/toml-binding.md). Binding validation independently requires a `project` table with the `framework` and `target` string values shown above; file, syntax, and binding errors exit with code `4`. +| Area | Sunhat 1.x | Sunhat 2 | +| -------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| Architecture | Hardhat plugin with a CLI proxy | Project CLI with separate Hardhat and Foundry adapters | +| Configuration | Sunhat's Hardhat plugin API | `sunhat.toml` binds the framework and target; native framework configuration stays in the project | +| Initialization | Hardhat-oriented scaffold with automatic npm installation | Four framework/target templates, explicit npm installation, and `--adopt` for existing projects | +| Foundry | Used alongside the Hardhat workflow | Project-local EVM or TRON toolchain installed and verified during `init` | -Initialization uses exclusive file creation. It fails if a destination file already exists and never overwrites unknown content. Dependency installation remains under the project's control. +Commands use the selected framework's syntax: `sunhat compile` for Hardhat, `sunhat build` for Foundry, and `sunhat test` for either. V1 plugin APIs such as deployment tracking and named accounts are not provided by the v2 CLI; migration requires reviewing the project's plugins and scripts. -After initialization, enter the project directory and install its dependencies: +## Start a project -```bash -cd contracts -npm install --save-dev --save-exact sunhat@2.0.0 -``` - -This command installs the project's declared dependencies and pins its local Sunhat to `2.0.0` from npm. The current scaffold initially writes a `file:` reference to the Sunhat installation that created it; the command replaces that reference so the project no longer depends on that installation path. Run the same installation command in an adopted project's root. - -## Project commands - -The following lists use a globally installed Sunhat and require the project binding described above. Native command availability and options are determined by the project's installed framework and plugins. - -### Hardhat projects: EVM and TRON - -Complete the project dependency installation above first. Hardhat must be declared with an exact version matching the installed Hardhat 2 package. - -| Command | Purpose | -| -------------------------------------- | ---------------------------------------------------- | -| `sunhat compile [--force]` | Compile contracts, optionally forcing recompilation. | -| `sunhat test [--grep Counter]` | Run all tests or matching tests. | -| `sunhat run scripts/deploy.ts` | Run the deployment script on the configured network. | -| `sunhat node` | Run the configured Hardhat node task. | -| `sunhat console [--no-compile]` | Open the Hardhat console. | -| `sunhat flatten contracts/Counter.sol` | Print flattened contract source. | -| `sunhat clean` | Remove Hardhat artifacts and cache. | -| `sunhat help [task]` | List native tasks or show help for one task. | -| `sunhat [args...]` | Forward a task registered by an installed plugin. | - -### Foundry projects: EVM and TRON - -`sunhat init` installs and verifies the project toolchain before reporting success. Native commands then use that installation. The toolchain supports macOS/Linux arm64 and x64, and Windows x64. - -| Command | Purpose | Target | -| ------------------------------------------ | ------------------------------------------------- | --------- | -| `sunhat toolchain install` | Retry or reinstall the configured toolchain. | EVM, TRON | -| `sunhat toolchain info` | Print the installed toolchain metadata. | EVM, TRON | -| `sunhat build [--sizes]` | Compile contracts and optionally report sizes. | EVM, TRON | -| `sunhat test [-vvv]` | Run tests, optionally with verbose traces. | EVM, TRON | -| `sunhat test --match-contract CounterTest` | Run one test contract. | EVM, TRON | -| `sunhat test --gas-report` | Request the selected toolchain's resource report. | EVM, TRON | -| `sunhat snapshot` | Record resource usage snapshots. | EVM, TRON | -| `sunhat coverage` | Generate a coverage report. | EVM, TRON | -| `sunhat script ` | Run a Foundry script. | EVM, TRON | -| `sunhat create ` | Deploy a contract with the selected toolchain. | EVM, TRON | -| `sunhat clean` | Remove build artifacts and cache. | EVM, TRON | -| `sunhat fmt --check` | Check Solidity formatting. | EVM, TRON | -| `sunhat inspect abi` | Print a contract's ABI. | EVM, TRON | -| `sunhat cast [args...]` | Run Cast from the project toolchain. | EVM, TRON | -| `sunhat anvil [args...]` | Start the project-pinned local EVM node. | EVM only | -| `sunhat chisel [args...]` | Open the project-pinned Solidity REPL. | EVM only | -| `sunhat help [command]` | Show native Forge help. | EVM, TRON | - -Other native Forge commands are forwarded as `sunhat [args...]`. The `toolchain` commands above are managed by Sunhat only for Foundry bindings; in a Hardhat project, the same arguments are forwarded to Hardhat as a native task. - -Sunhat does not rewrite core commands across frameworks. Compile Hardhat projects with `sunhat compile` and Foundry projects with `sunhat build`. Based on the `sunhat.toml` binding, Sunhat forwards each command and its arguments directly to the selected framework. The former `sunhat hardhat ...` and `sunhat foundry ...` three-part command forms are no longer supported. Anvil and Chisel are unavailable for TRON Foundry projects. - -The target project must install Hardhat major version 2. The current template pins `hardhat@2.29.1`, which supports Node.js 24. Sunhat resolves the absolute Hardhat entry point from the project's dependencies and does not invoke `npx`. - -Hardhat TRON projects require a running Docker daemon. Their generated configuration selects the `tre` network, compiles with `tron-solc`, and starts `tronbox/tre:dev` automatically for `sunhat test`. Set `TRE_URL` and `TRE_PRIVATE_KEY` to use an existing TRE instance instead of the generated local defaults. - -Hardhat dependencies use exact versions published on the npm registry. Sunhat's project dependency is pinned to `sunhat@2.0.0` by the installation step above. Foundry initialization installs the configured GitHub release automatically. Inspect the installed metadata with: +Use Node.js 20.11 or newer. The default project is Foundry + TRON: ```bash -sunhat toolchain info +npm install --global @sun-protocol/sunhat@2.0.0 +sunhat init counter +cd counter +sunhat build +sunhat test ``` -Foundry release sources, versions, platform archives, executable names, and checksums live in `templates/foundry//foundry-toolchain.json`. Initialization copies the selected file into the project and uses it for installation. Existing projects without this file use the selected template's defaults. The installer verifies the archive before extracting it to `.sunhat/toolchains/`; native commands do not rehash binaries, probe their versions, or compare their release metadata with template defaults. New version-2 locks record executable paths without binary digests; existing version-1 locks remain readable. `toolchain info` prints installed metadata, and there is no separate `toolchain check` command. - -Compiler installation is handled by the framework on first compilation. In a Foundry project, run `sunhat build`: EVM projects resolve `solc`, while TRON projects resolve native `tron-solc`. Set `solc` in the project's `foundry.toml` to select a version or local executable. In a Hardhat project, install the declared npm dependencies, then run `npm run build`; compiler selection comes from `hardhat.config.ts`. Initialization installs the Foundry tools but does not predownload Solidity compilers. - -Installation stages all binaries on the project's toolchain filesystem before replacing an existing installation. The previous directory is kept until the new lock file is committed. If activation or lock replacement fails, Sunhat restores the previous directory; if restoration also fails, it retains the backup and reports its location. - -Child processes receive a structured argv array and run with `shell: false`. They inherit stdout and stderr, and Sunhat forwards SIGINT, SIGTERM, and the native exit status. +See [QuickStart](docs/QuickStart.md) for all four project types, local installation, compiler setup, adoption, and command examples. ## Development -Use Node.js 24 for repository development, matching CI. Run these commands from a Sunhat source checkout: +Use Node.js 24 for repository development: ```bash -npm install +npm ci npm run lint npm run format:check npm test ``` -`npm test` builds Sunhat, initializes all four framework/target combinations, and exercises the commands listed in the generated READMEs, npm scripts, argument forwarding, subdirectory resolution, exit codes, and toolchain rejection paths. Framework executables and download responses are fixtures; the suite does not run Solidity compilers, Docker/TRE, or real deployments. - -Run `npm run test:templates` to generate fresh Hardhat EVM and TRON projects, install their declared dependencies, and check both with `tsc --noEmit`. This integration suite requires access to the npm registry and checks dependency declarations without enabling `skipLibCheck`. It does not require Docker or a blockchain connection. - -Use `npm run lint:fix` to apply ESLint fixes and `npm run format` to format JavaScript, TypeScript, Solidity templates, JSON, YAML, and Markdown. CI runs both lint and formatting checks. Generated files and local toolchains are excluded. +`npm run test:templates` installs fresh Hardhat EVM/TRON projects and runs `tsc --noEmit`. `npm run pack:check` checks package contents. Runtime tests use framework and download fixtures. -Initialization assets live under `templates//common/` and `templates///`. The target directory supplies `package.json`, native framework configuration, `sunhat.toml`, and README; target files override matching common files. Edit these templates to change compiler versions, dependencies, scripts, or network defaults. Initialization copies the selected files and substitutes only the JSON string values `{{projectName}}` and `{{sunhatDependency}}`; adoption copies only the selected binding. +Initialization files and Foundry release data live under `templates//common/` and `templates///`. Target files override matching common files. The [TOML compatibility note](docs/toml-binding.md) documents the binding syntax baseline and parser limits. diff --git a/docs/QuickStart.md b/docs/QuickStart.md new file mode 100644 index 0000000..6638bde --- /dev/null +++ b/docs/QuickStart.md @@ -0,0 +1,195 @@ +# Sunhat 2 QuickStart + +Sunhat runs Hardhat or Foundry using the framework and target recorded in the project. The package name is `@sun-protocol/sunhat`; commands use `sunhat`. + +## Requirements + +- Node.js **20.11+** for Sunhat. Node.js 24 is used for repository development and validation. +- Foundry initialization needs access to the configured GitHub release and `tar` on macOS/Linux or PowerShell on Windows. Its toolchain installer supports macOS/Linux arm64 and x64, and Windows x64. +- The default Hardhat TRON test setup needs Docker running locally for TRE. Hardhat projects currently require **Hardhat 2**, declared as an exact version matching the installed package. +- First compilation needs network access when the compiler is not already cached. + +## Install Sunhat + +```bash +npm install --global @sun-protocol/sunhat@2.0.0 +sunhat --version +sunhat --help +``` + +The version command should print `sunhat 2.0.0`. Ensure npm's global executable directory is on `PATH`. The examples below use this global CLI unless stated otherwise. + +## Create a project + +| Framework | Target | Command | +| --------- | ----------------- | ---------------------------------------------------------- | +| Foundry | TRON, the default | `sunhat init counter-tron` | +| Foundry | EVM | `sunhat init --target evm counter-evm` | +| Hardhat | TRON | `sunhat init --framework hardhat hardhat-tron` | +| Hardhat | EVM | `sunhat init --framework hardhat --target evm hardhat-evm` | + +Initialization refuses to overwrite existing destination files. For an existing framework project, use [adoption](#adopt-an-existing-project). + +### Foundry + +```bash +sunhat init counter-tron +cd counter-tron +sunhat build +sunhat test +``` + +`init` downloads, verifies, and installs Foundry-TRON into the project's `.sunhat/` directory. For an EVM project, use the EVM initialization command from the table; the build and test commands stay the same. A separate toolchain installation step is unnecessary after successful initialization. + +### Hardhat + +```bash +sunhat init --framework hardhat hardhat-tron +cd hardhat-tron +npm install +sunhat compile +sunhat test +``` + +`init` writes the project files; `npm install` installs Hardhat and its plugins. The TRON template selects `tre` as its default network. The plugin starts a TRE Docker container for tests. To use an existing TRE instance, set `tre.autoStart` to `false` in `hardhat.config.ts` and configure `TRE_URL` and `TRE_PRIVATE_KEY`. + +For EVM, initialize with `--target evm` and use the same install, compile, and test sequence. The EVM template does not load the TRON plugin. + +## Use the local CLI and npm scripts + +Generated projects initially reference the Sunhat installation that created them through a `file:` dependency named `sunhat`. For a portable registry dependency, replace that reference from the generated project's root: + +```bash +npm install --save-dev --save-exact sunhat@npm:@sun-protocol/sunhat@2.0.0 +``` + +This npm alias keeps the generated dependency name `sunhat` while installing the scoped package. Commit `package.json` and the package-manager lockfile for reproducible npm dependency installation. + +```bash +npx --no-install sunhat --version +npm run build +npm test +``` + +The generated `build` script runs `sunhat build` for Foundry or `sunhat compile` for Hardhat. Both templates map `npm test` to `sunhat test`. Forward additional arguments with `npm run build -- ` or `npm test -- `. + +Global Sunhat resolves the project's framework tools, but it does not switch to the project's Sunhat version. Use `npx --no-install sunhat ...` or the generated npm scripts when you want the local CLI. + +## Adopt an existing project + +Run the appropriate command from a directory containing `foundry.toml` or `hardhat.config.js`, `.cjs`, or `.ts`: + +| Existing project | Command | +| ---------------- | -------------------------------------------------------- | +| Foundry TRON | `sunhat init --adopt .` | +| Foundry EVM | `sunhat init --adopt --target evm .` | +| Hardhat TRON | `sunhat init --adopt --framework hardhat .` | +| Hardhat EVM | `sunhat init --adopt --framework hardhat --target evm .` | + +Adoption preserves native framework configuration, source files, tests, and `package.json`. It adds the Sunhat binding. Foundry adoption also adds `foundry-toolchain.json` if missing and installs the toolchain. For Hardhat, install the project's declared dependencies separately. + +To add a local Sunhat CLI to an adopted project: + +```bash +npm install --save-dev --save-exact @sun-protocol/sunhat@2.0.0 +``` + +An already-bound project is rejected by `init`; it is not reinitialized. + +## Project configuration + +The default binding is: + +```toml +[project] +framework = "foundry" +target = "tron" +``` + +Use `framework = "hardhat"` for Hardhat or `target = "evm"` for EVM. Choose the binding that matches the project's native configuration and installed tools. Changing this file does not rewrite framework configuration or install a different toolchain. + +| File | Responsibility | +| ------------------------------- | --------------------------------------------------------------------- | +| `sunhat.toml` | Framework and target used for command routing | +| `foundry.toml` | Foundry compiler, source paths, and network settings | +| `hardhat.config.ts` | Hardhat compiler, plugins, and network settings in generated projects | +| `foundry-toolchain.json` | Foundry release, platform archives, and installation checksums | +| `package.json` and its lockfile | npm dependencies and project scripts | + +Run commands from the project root or a subdirectory. Sunhat locates the nearest ancestor containing `sunhat.toml` and runs the framework from that project root. See [TOML compatibility](toml-binding.md) for binding syntax details. + +## Compiler installation + +Compilers are resolved by the framework on first compilation; Foundry initialization installs the tools without predownloading Solidity compilers. + +| Project | First compilation | Compiler selection | +| ---------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| Foundry EVM | `sunhat build` downloads uncached `solc` | Source pragmas or the `solc` setting in `foundry.toml`; the sample uses 0.8.28 | +| Foundry TRON | `sunhat build` resolves native `tron-solc` | `solc` in `foundry.toml`; the selected toolchain defaults to 0.8.28 | +| Hardhat EVM/TRON | After `npm install`, `sunhat compile` resolves the selected compiler | `solidity` in `hardhat.config.ts`; both templates select 0.8.26 | + +For example, set this key under the existing `[profile.default]` section in `foundry.toml`: + +```toml +solc = "0.8.28" +``` + +Foundry also accepts a local compiler path through `solc`. Foundry-TRON caches downloaded native compilers under `~/.foundry-tron/solc/`. Hardhat TRON uses the compiler downloader supplied by `@openzeppelin/hardhat-tron`. + +## Common Foundry commands + +| Command | Purpose | +| -------------------------------------------------- | ------------------------------------------------------------- | +| `sunhat build --sizes` | Compile and report contract sizes | +| `sunhat test -vvv` | Run tests with verbose traces | +| `sunhat test --match-contract CounterTest` | Run one test contract | +| `sunhat test --gas-report` | Report gas on EVM or resources supported by Foundry-TRON | +| `sunhat snapshot` | Write resource snapshots | +| `sunhat coverage` | Run coverage | +| `sunhat fmt --check` | Check Solidity formatting | +| `sunhat inspect src/Counter.sol:Counter abi` | Inspect the sample contract ABI | +| `sunhat script script/Counter.s.sol:DeployCounter` | Run the sample deployment script without requesting broadcast | +| `sunhat create --help` | Show native contract-deployment options | +| `sunhat cast --help` | Show Cast commands | +| `sunhat clean` | Remove build artifacts and cache | +| `sunhat help build` | Show Forge build options | +| `sunhat anvil` | Start Anvil, EVM only | +| `sunhat chisel` | Start Chisel, EVM only | + +TRON Foundry commands use the project's Foundry-TRON binaries. Anvil and Chisel are unavailable for TRON. RPC URLs, accounts, and broadcast options follow the selected framework's native configuration and CLI. + +## Common Hardhat commands + +| Command | Purpose | +| -------------------------------------- | ----------------------------------- | +| `sunhat compile --force` | Recompile contracts | +| `sunhat test --grep Counter` | Run matching tests | +| `sunhat run scripts/deploy.ts` | Run the generated deployment script | +| `sunhat node` | Run the configured node task | +| `sunhat console --no-compile` | Open a console | +| `sunhat flatten contracts/Counter.sol` | Flatten the sample contract | +| `sunhat clean` | Remove artifacts and cache | +| `sunhat help compile` | Show compile-task options | + +Plugin tasks are forwarded in the same form: `sunhat [args...]`. Sunhat forwards arguments and the framework's exit status; it does not translate Foundry commands into Hardhat tasks or the reverse. Use `sunhat compile` with Hardhat and `sunhat build` with Foundry. + +## Toolchain recovery + +If Foundry initialization fails during download or installation, its generated project files remain available. Enter that project directory and retry: + +```bash +sunhat toolchain install +sunhat toolchain info +``` + +`install` retries or reinstalls the release declared in `foundry-toolchain.json`. `info` prints installed metadata. Archive verification belongs to installation; ordinary execution does not rehash binaries or probe their versions. In a Hardhat project, `toolchain` is forwarded as a native task instead. + +## Moving from Sunhat 1.x + +Sunhat 1.x is maintenance-only. The v2 CLI does not replace v1's Hardhat plugin APIs, deployment tracking, named accounts, or bundled audit tasks. + +1. Review dependencies, configuration imports, deployment scripts, and custom tasks that use the v1 plugin. Configure the native framework and plugins for the features the project needs. Generated v2 templates provide working configuration examples. +2. Bind the project using the matching `init --adopt` command above. Adoption does not rewrite the old plugin configuration or migrate its deployment records. +3. Replace the v1 Sunhat dependency with `@sun-protocol/sunhat@2.0.0` after updating those imports and scripts, then run compilation and tests. + +Keep projects that still depend on v1-only APIs pinned to their existing 1.x release until that migration is complete. diff --git a/package.json b/package.json index 2d6b794..28795b2 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "dist/", "templates/", "docs/toml-binding.md", + "docs/QuickStart.md", "README.md" ], "engines": { diff --git a/templates/foundry/evm/README.md b/templates/foundry/evm/README.md index 3d046c7..0ce4195 100644 --- a/templates/foundry/evm/README.md +++ b/templates/foundry/evm/README.md @@ -4,21 +4,21 @@ This project uses Sunhat to select and run a project-local Foundry toolchain for ## Global command prerequisites -The `sunhat ...` examples use the `sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: +The `sunhat ...` examples use the `@sun-protocol/sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: ```bash -npm install --global sunhat@2.0.0 +npm install --global @sun-protocol/sunhat@2.0.0 sunhat --version ``` Run project commands from this directory or a subdirectory. `sunhat init` has already installed the Foundry toolchain. Global Sunhat uses the binaries in this project's `.sunhat/` directory. -The quick start also installs `sunhat@2.0.0` as an exact local development dependency. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. +The quick start also installs `@sun-protocol/sunhat@2.0.0` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. ## Quick start ```bash -npm install --save-dev --save-exact sunhat@2.0.0 +npm install --save-dev --save-exact sunhat@npm:@sun-protocol/sunhat@2.0.0 npm run build npm test ``` diff --git a/templates/foundry/tron/README.md b/templates/foundry/tron/README.md index 25ec1ba..cc6cbed 100644 --- a/templates/foundry/tron/README.md +++ b/templates/foundry/tron/README.md @@ -4,21 +4,21 @@ This project uses Sunhat to select and run a project-local Foundry-TRON toolchai ## Global command prerequisites -The `sunhat ...` examples use the `sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: +The `sunhat ...` examples use the `@sun-protocol/sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: ```bash -npm install --global sunhat@2.0.0 +npm install --global @sun-protocol/sunhat@2.0.0 sunhat --version ``` Run project commands from this directory or a subdirectory. `sunhat init` has already installed the Foundry-TRON toolchain. Global Sunhat uses the binaries in this project's `.sunhat/` directory. Anvil and Chisel are unavailable for TRON. -The quick start also installs `sunhat@2.0.0` as an exact local development dependency. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. +The quick start also installs `@sun-protocol/sunhat@2.0.0` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. ## Quick start ```bash -npm install --save-dev --save-exact sunhat@2.0.0 +npm install --save-dev --save-exact sunhat@npm:@sun-protocol/sunhat@2.0.0 npm run build npm test ``` diff --git a/templates/hardhat/evm/README.md b/templates/hardhat/evm/README.md index 1ba0e10..1d7827c 100644 --- a/templates/hardhat/evm/README.md +++ b/templates/hardhat/evm/README.md @@ -4,21 +4,21 @@ This project uses Sunhat to run the locally installed Hardhat 2 toolchain for an ## Global command prerequisites -The `sunhat ...` examples use the `sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: +The `sunhat ...` examples use the `@sun-protocol/sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: ```bash -npm install --global sunhat@2.0.0 +npm install --global @sun-protocol/sunhat@2.0.0 sunhat --version ``` Run project commands from this directory or a subdirectory after the dependency installation below. Global Sunhat uses the project's local Hardhat 2 dependency and configuration. -The quick start also installs `sunhat@2.0.0` as an exact local development dependency. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. +The quick start also installs `@sun-protocol/sunhat@2.0.0` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. ## Quick start ```bash -npm install --save-dev --save-exact sunhat@2.0.0 +npm install --save-dev --save-exact sunhat@npm:@sun-protocol/sunhat@2.0.0 npm run build npm test ``` diff --git a/templates/hardhat/tron/README.md b/templates/hardhat/tron/README.md index 7ba97cb..c99d183 100644 --- a/templates/hardhat/tron/README.md +++ b/templates/hardhat/tron/README.md @@ -4,23 +4,23 @@ This project uses Sunhat to run Hardhat 2 with the Hardhat-TRON plugin and a TRE ## Global command prerequisites -The `sunhat ...` examples use the `sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: +The `sunhat ...` examples use the `@sun-protocol/sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: ```bash -npm install --global sunhat@2.0.0 +npm install --global @sun-protocol/sunhat@2.0.0 sunhat --version ``` Run project commands from this directory or a subdirectory after the dependency installation below. Global Sunhat uses the project's local Hardhat 2 and Hardhat-TRON dependencies and configuration. -The quick start also installs `sunhat@2.0.0` as an exact local development dependency. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. +The quick start also installs `@sun-protocol/sunhat@2.0.0` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. Docker must be installed and running. The generated configuration starts `tronbox/tre:dev` automatically when required. ## Quick start ```bash -npm install --save-dev --save-exact sunhat@2.0.0 +npm install --save-dev --save-exact sunhat@npm:@sun-protocol/sunhat@2.0.0 npm run build npm test ``` @@ -46,7 +46,7 @@ Arguments after the Sunhat command are passed to Hardhat unchanged. ## External TRE instance -Set both variables to use an existing TRE instance instead of the generated local defaults: +Set `tre.autoStart` to `false` in `hardhat.config.ts`, then configure both variables to use an existing TRE instance: ```bash export TRE_URL="http://127.0.0.1:9090/jsonrpc" From 3f1938ed2737ec60e14b32c07e4e85df0eb987d4 Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 21:27:40 +0800 Subject: [PATCH 08/24] fix: check initialization parent paths before writing files --- src/commands/init.ts | 37 ++++++++++++++- test/init-template-assets.test.js | 78 +++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 1 deletion(-) diff --git a/src/commands/init.ts b/src/commands/init.ts index ca50975..76e8c98 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -1,8 +1,10 @@ import { existsSync, + lstatSync, mkdirSync, readdirSync, readFileSync, + statSync, writeFileSync, } from 'node:fs'; import { basename, dirname, join, resolve } from 'node:path'; @@ -120,7 +122,13 @@ function scaffold(root: string, framework: Framework, target: Target): void { path: resolve(root, name), data: renderTemplate(from, root), })); - const conflict = outputs.find((file) => existsSync(file.path)); + const checked = new Set(); + for (const file of outputs) { + validateParentDirectories(dirname(file.path), root, checked); + } + const conflict = outputs.find((file) => + lstatSync(file.path, { throwIfNoEntry: false }), + ); if (conflict) { throw new CliError( `refusing to overwrite existing file ${conflict.path}`, @@ -131,6 +139,33 @@ function scaffold(root: string, framework: Framework, target: Target): void { writeExclusive(file.path, file.data); } } +function validateParentDirectories( + directory: string, + root: string, + checked: Set, +): void { + const parents: string[] = []; + for (let path = directory; path !== root; path = dirname(path)) { + parents.push(path); + } + for (const path of parents.reverse()) { + if (checked.has(path)) { + continue; + } + const entry = lstatSync(path, { throwIfNoEntry: false }); + if ( + entry && + !entry.isDirectory() && + !( + entry.isSymbolicLink() && + statSync(path, { throwIfNoEntry: false })?.isDirectory() + ) + ) { + throw new CliError(`parent path is not a directory: ${path}`, 2); + } + checked.add(path); + } +} function collectTemplates( directory: string, relativePath: string, diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js index 0d20ba5..afee23e 100644 --- a/test/init-template-assets.test.js +++ b/test/init-template-assets.test.js @@ -6,6 +6,7 @@ import { mkdirSync, mkdtempSync, readFileSync, + readdirSync, realpathSync, rmSync, symlinkSync, @@ -191,6 +192,83 @@ test('new template files participate in conflict checks before any project file } }); +for (const framework of ['hardhat', 'foundry']) { + for (const target of ['evm', 'tron']) { + test(`${framework}/${target} rejects parent-file conflicts before writing and remains retryable`, (t) => { + const fixture = runtime(t); + json( + resolve( + fixture.packageRoot, + 'templates', + framework, + 'common/config/nested/custom.json', + ), + { enabled: true }, + ); + for (const blocked of ['test', 'config']) { + const project = resolve(fixture.temporary, `conflict-${blocked}`); + mkdirSync(project); + const owned = resolve(project, blocked); + writeFileSync(owned, 'user-owned content'); + for (let attempt = 0; attempt < 2; attempt += 1) { + const result = run(fixture, [ + '--framework', + framework, + '--target', + target, + project, + ]); + assert.equal(result.status, 2, result.stderr); + assert.match(result.stderr, /parent path is not a directory/u); + assert.ok(result.stderr.includes(owned)); + assert.deepEqual(readdirSync(project), [blocked]); + assert.equal(readFileSync(owned, 'utf8'), 'user-owned content'); + } + } + }); + } +} + +test('initialization preserves existing directory symlinks and rejects dangling parents', (t) => { + const fixture = runtime(t); + const project = resolve(fixture.temporary, 'linked-project'); + const storage = resolve(fixture.temporary, 'contract-storage'); + mkdirSync(project); + mkdirSync(storage); + symlinkSync( + storage, + resolve(project, 'contracts'), + process.platform === 'win32' ? 'junction' : 'dir', + ); + const initialized = run(fixture, [ + '--framework', + 'hardhat', + '--target', + 'evm', + project, + ]); + assert.equal(initialized.status, 0, initialized.stderr); + assert.ok(existsSync(resolve(storage, 'Counter.sol'))); + + const blocked = resolve(fixture.temporary, 'dangling-project'); + mkdirSync(blocked); + symlinkSync( + resolve(fixture.temporary, 'missing'), + resolve(blocked, 'test'), + process.platform === 'win32' ? 'junction' : 'dir', + ); + const rejected = run(fixture, [ + '--framework', + 'hardhat', + '--target', + 'evm', + blocked, + ]); + assert.equal(rejected.status, 2, rejected.stderr); + assert.match(rejected.stderr, /parent path is not a directory/u); + assert.deepEqual(readdirSync(blocked), ['test']); +}); + test('adoption reads the template binding without copying the remaining scaffold', (t) => { const fixture = runtime(t); const project = resolve(fixture.temporary, 'adopted project'); From 96e1bb30a804c63a5b082b2e937fdd8879694b37 Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 21:36:00 +0800 Subject: [PATCH 09/24] fix: validate framework JSON input types --- package.json | 2 +- src/adapters/foundry.ts | 40 +++++-- src/adapters/hardhat.ts | 64 +++++++++-- src/project/json.ts | 23 ++++ src/toolchain/releases.ts | 62 +++++----- test/json-boundaries.test.js | 216 +++++++++++++++++++++++++++++++++++ 6 files changed, 354 insertions(+), 53 deletions(-) create mode 100644 src/project/json.ts create mode 100644 test/json-boundaries.test.js diff --git a/package.json b/package.json index 28795b2..6340626 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "build": "npm run clean && tsc -p tsconfig.json", "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"", "test": "npm run build && npm run test:runtime", - "test:runtime": "node --test test/toml.test.js test/binding.test.js test/cli.test.js test/init-commands.test.js test/init-template-assets.test.js test/toolchain.test.js", + "test:runtime": "node --test test/toml.test.js test/binding.test.js test/json-boundaries.test.js test/cli.test.js test/init-commands.test.js test/init-template-assets.test.js test/toolchain.test.js", "test:templates": "npm run build && node --test test/template-types.test.js", "pack:check": "npm run build && npm pack --dry-run" }, diff --git a/src/adapters/foundry.ts b/src/adapters/foundry.ts index 870ab1f..978103a 100644 --- a/src/adapters/foundry.ts +++ b/src/adapters/foundry.ts @@ -1,8 +1,9 @@ -import { readFileSync, realpathSync } from 'node:fs'; +import { realpathSync } from 'node:fs'; import { resolve, sep } from 'node:path'; import { toolchainError } from '../errors.js'; import type { Target } from '../project/binding.js'; import { spawnNative } from '../process/spawn.js'; +import { isRecord, readJson } from '../project/json.js'; type FoundryTool = 'forge' | 'cast' | 'anvil' | 'chisel'; export interface ToolchainLock { @@ -12,7 +13,7 @@ export interface ToolchainLock { release: string; revision: string; platform: string; - binaries: Record; + binaries: Partial>; } export async function runFoundry( @@ -39,18 +40,35 @@ export async function runFoundry( export function loadToolchain(root: string, target: Target): ToolchainLock { const path = resolve(root, '.sunhat/toolchain.json'); - let lock: ToolchainLock; - try { - lock = JSON.parse(readFileSync(path, 'utf8')) as ToolchainLock; - } catch { - return toolchainError( - 'Foundry toolchain is not installed; run `sunhat toolchain install`', - ); + const lock = readJson( + path, + 'Foundry toolchain is not installed; run `sunhat toolchain install`', + ); + if (!isToolchainLock(lock)) { + return toolchainError(`invalid Foundry toolchain lock: ${path}`); } - if ((lock.version !== 1 && lock.version !== 2) || lock.target !== target) { + if (lock.target !== target) { return toolchainError( - `toolchain lock does not match the ${target} project; reinstall it`, + `toolchain lock ${path} does not match the ${target} project; reinstall it`, ); } return lock; } + +function isToolchainLock(value: unknown): value is ToolchainLock { + return ( + isRecord(value) && + (value.version === 1 || value.version === 2) && + (value.target === 'evm' || value.target === 'tron') && + ['source', 'release', 'revision', 'platform'].every( + (key) => typeof value[key] === 'string', + ) && + isRecord(value.binaries) && + Object.values(value.binaries).every( + (binary) => + isRecord(binary) && + typeof binary.path === 'string' && + binary.path.length > 0, + ) + ); +} diff --git a/src/adapters/hardhat.ts b/src/adapters/hardhat.ts index b080ad9..d306aa7 100644 --- a/src/adapters/hardhat.ts +++ b/src/adapters/hardhat.ts @@ -1,39 +1,57 @@ import { createRequire } from 'node:module'; import { dirname, isAbsolute, resolve, sep } from 'node:path'; -import { readFileSync, realpathSync } from 'node:fs'; +import { existsSync, realpathSync } from 'node:fs'; import { toolchainError } from '../errors.js'; import { spawnNative } from '../process/spawn.js'; +import { isRecord, readJson } from '../project/json.js'; interface PackageJson { version?: string; bin?: string | Record; + dependencies?: Record; + devDependencies?: Record; } export async function runHardhat( root: string, args: readonly string[], ): Promise { + const project = readPackageJson(resolve(root, 'package.json')); const require = createRequire(resolve(root, 'package.json')); let manifestPath: string; try { manifestPath = require.resolve('hardhat/package.json'); - } catch { + } catch (error) { + // Node 20 may fail while parsing metadata before returning its resolved path. + if (error instanceof SyntaxError || error instanceof TypeError) { + const path = + 'path' in error && typeof error.path === 'string' + ? error.path + : require.resolve + .paths('hardhat') + ?.map((directory) => resolve(directory, 'hardhat/package.json')) + .find((candidate) => existsSync(candidate)); + if (path) { + readPackageJson(path); + } + } + if ( + error instanceof Error && + 'code' in error && + error.code === 'ERR_INVALID_PACKAGE_CONFIG' + ) { + return toolchainError( + `cannot resolve Hardhat in ${root}: ${error.message}`, + ); + } return toolchainError( 'local Hardhat dependency is missing; install the project lockfile dependencies', ); } - const manifest = JSON.parse( - readFileSync(manifestPath, 'utf8'), - ) as PackageJson; + const manifest = readPackageJson(manifestPath); if (!manifest.version?.startsWith('2.')) { return toolchainError( `Hardhat 2 is required; resolved ${manifest.version ?? 'unknown'} at ${manifestPath}`, ); } - const project = JSON.parse( - readFileSync(resolve(root, 'package.json'), 'utf8'), - ) as { - dependencies?: Record; - devDependencies?: Record; - }; const expected = project.devDependencies?.hardhat ?? project.dependencies?.hardhat; if (!expected) { @@ -63,3 +81,27 @@ export async function runHardhat( } return await spawnNative(process.execPath, [entry, ...args], root); } + +function readPackageJson(path: string): PackageJson { + const value = readJson(path); + if ( + !isRecord(value) || + (value.version !== undefined && typeof value.version !== 'string') || + (value.bin !== undefined && + typeof value.bin !== 'string' && + !isStringRecord(value.bin)) || + (value.dependencies !== undefined && !isStringRecord(value.dependencies)) || + (value.devDependencies !== undefined && + !isStringRecord(value.devDependencies)) + ) { + return toolchainError(`invalid package manifest: ${path}`); + } + return value; +} + +function isStringRecord(value: unknown): value is Record { + return ( + isRecord(value) && + Object.values(value).every((item) => typeof item === 'string') + ); +} diff --git a/src/project/json.ts b/src/project/json.ts new file mode 100644 index 0000000..8ddc274 --- /dev/null +++ b/src/project/json.ts @@ -0,0 +1,23 @@ +import { readFileSync } from 'node:fs'; +import { toolchainError } from '../errors.js'; + +export function readJson(path: string, missingMessage?: string): unknown { + try { + return JSON.parse(readFileSync(path, 'utf8')); + } catch (error) { + if ( + missingMessage && + error instanceof Error && + 'code' in error && + error.code === 'ENOENT' + ) { + return toolchainError(missingMessage); + } + const message = error instanceof Error ? error.message : String(error); + return toolchainError(`cannot read JSON file ${path}: ${message}`); + } +} + +export function isRecord(value: unknown): value is Record { + return typeof value === 'object' && value !== null && !Array.isArray(value); +} diff --git a/src/toolchain/releases.ts b/src/toolchain/releases.ts index 95c40aa..23e2c64 100644 --- a/src/toolchain/releases.ts +++ b/src/toolchain/releases.ts @@ -1,8 +1,9 @@ -import { existsSync, readFileSync } from 'node:fs'; +import { existsSync } from 'node:fs'; import { basename, dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import type { Target } from '../project/binding.js'; import { toolchainError } from '../errors.js'; +import { isRecord, readJson } from '../project/json.js'; export interface Release { source: string; @@ -12,13 +13,6 @@ export interface Release { sha256: string; tools: Record<'forge' | 'cast' | 'anvil' | 'chisel', string>; } -interface ReleaseConfig extends Pick< - Release, - 'source' | 'release' | 'revision' -> { - target: Target; - platforms: Record>; -} const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); export function platformKey(): string { @@ -36,49 +30,57 @@ export function releaseFor(target: Target, root?: string): Release { target, 'foundry-toolchain.json', ); - let config: ReleaseConfig; - try { - config = JSON.parse(readFileSync(path, 'utf8')) as ReleaseConfig; - } catch { - return toolchainError( - `cannot read Foundry toolchain configuration: ${path}`, - ); - } - if (!config || config.target !== target) { + const config = readJson(path); + if (!isRecord(config) || config.target !== target) { return toolchainError( `Foundry toolchain configuration target does not match ${target}: ${path}`, ); } - const artifact = config.platforms?.[platformKey()]; - if (!artifact) { + const { source, release, revision, platforms } = config; + if ( + typeof source !== 'string' || + !source || + typeof release !== 'string' || + !release || + typeof revision !== 'string' || + !revision || + !isRecord(platforms) + ) { + return toolchainError(`invalid Foundry toolchain configuration: ${path}`); + } + const artifact = platforms[platformKey()]; + if (artifact === undefined) { return toolchainError( `unsupported Foundry platform ${process.platform}-${process.arch}`, ); } if ( - ![config.source, config.release, config.revision].every( - (value) => typeof value === 'string' && value.length > 0, - ) || + !isRecord(artifact) || !isFilename(artifact.archive) || typeof artifact.sha256 !== 'string' || !/^[a-f0-9]{64}$/iu.test(artifact.sha256) || - !artifact.tools || - Object.keys(artifact.tools).length !== 4 || - !['forge', 'cast', 'anvil', 'chisel'].every((tool) => - isFilename(artifact.tools[tool as keyof Release['tools']]), - ) + !isToolMap(artifact.tools) ) { return toolchainError(`invalid Foundry toolchain configuration: ${path}`); } return { - source: config.source, - release: config.release, - revision: config.revision, + source, + release, + revision, archive: artifact.archive, sha256: artifact.sha256.toLowerCase(), tools: artifact.tools, }; } +function isToolMap(value: unknown): value is Release['tools'] { + return ( + isRecord(value) && + Object.keys(value).length === 4 && + ['forge', 'cast', 'anvil', 'chisel'].every((tool) => + isFilename(value[tool]), + ) + ); +} function isFilename(value: unknown): value is string { return ( typeof value === 'string' && diff --git a/test/json-boundaries.test.js b/test/json-boundaries.test.js new file mode 100644 index 0000000..8230789 --- /dev/null +++ b/test/json-boundaries.test.js @@ -0,0 +1,216 @@ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import { + mkdirSync, + mkdtempSync, + readFileSync, + realpathSync, + rmSync, + writeFileSync, +} from 'node:fs'; +import { tmpdir } from 'node:os'; +import { dirname, resolve } from 'node:path'; +import test from 'node:test'; +import { platformKey, releaseFor } from '../dist/toolchain/releases.js'; + +const cli = resolve('bin/sunhat.js'); +function fixture(t, framework) { + const root = realpathSync(mkdtempSync(resolve(tmpdir(), 'sunhat-json-'))); + t.after(() => rmSync(root, { recursive: true, force: true })); + writeFileSync( + resolve(root, 'sunhat.toml'), + `[project]\nframework = "${framework}"\ntarget = "evm"\n`, + ); + return root; +} +function json(path, value) { + mkdirSync(dirname(path), { recursive: true }); + writeFileSync(path, JSON.stringify(value)); +} +function run(root, args) { + return spawnSync(process.execPath, [cli, ...args], { + cwd: root, + encoding: 'utf8', + timeout: 10_000, + }); +} +function assertInvalid(result, path) { + assert.equal(result.status, 3, result.stderr); + assert.ok(result.stderr.includes(path), result.stderr); + assert.doesNotMatch( + result.stderr, + /Cannot read properties|is not a function|argument must be of type/u, + ); + assert.equal(result.stdout, ''); +} +function lock() { + return { + version: 2, + target: 'evm', + source: 'fixture/foundry', + release: 'fixture', + revision: 'fixture', + platform: 'fixture', + binaries: { forge: { path: '.sunhat/forge' } }, + }; +} + +for (const [name, value] of [ + ['null root', null], + ['array root', []], + ['missing binaries', { ...lock(), binaries: undefined }], + ['null binaries', { ...lock(), binaries: null }], + ['array binaries', { ...lock(), binaries: [] }], + ['null binary', { ...lock(), binaries: { forge: null } }], + ['numeric path', { ...lock(), binaries: { forge: { path: 42 } } }], + ['empty path', { ...lock(), binaries: { forge: { path: '' } } }], + ['invalid metadata', { ...lock(), source: 42 }], + ['invalid schema version', { ...lock(), version: '2' }], +]) { + test(`Foundry rejects ${name} with a lock-file diagnostic`, (t) => { + const root = fixture(t, 'foundry'); + const path = resolve(root, '.sunhat/toolchain.json'); + json(path, value); + for (const args of [['build'], ['toolchain', 'info']]) { + assertInvalid(run(root, args), path); + } + }); +} + +test('Foundry reports malformed JSON separately from a missing installation', (t) => { + const root = fixture(t, 'foundry'); + const path = resolve(root, '.sunhat/toolchain.json'); + mkdirSync(dirname(path)); + writeFileSync(path, '{'); + const result = run(root, ['build']); + assertInvalid(result, path); + assert.match(result.stderr, /cannot read JSON file/u); + assert.doesNotMatch(result.stderr, /is not installed/u); +}); + +function hardhat(t) { + const root = fixture(t, 'hardhat'); + const project = resolve(root, 'package.json'); + const manifest = resolve(root, 'node_modules/hardhat/package.json'); + json(project, { devDependencies: { hardhat: '2.29.1' } }); + json(manifest, { + name: 'hardhat', + version: '2.29.1', + bin: { hardhat: 'cli.js' }, + }); + writeFileSync( + resolve(dirname(manifest), 'cli.js'), + 'process.stdout.write(JSON.stringify(process.argv.slice(2)));', + ); + return { root, project, manifest }; +} + +for (const [name, value] of [ + ['null root', null], + ['array root', []], + ['numeric version', { name: 'hardhat', version: 42 }], + ['numeric bin', { version: '2.29.1', bin: 42 }], + ['array bin', { version: '2.29.1', bin: ['cli.js'] }], + ['numeric bin entry', { version: '2.29.1', bin: { hardhat: 42 } }], +]) { + test(`Hardhat rejects manifest ${name} with its path`, (t) => { + const context = hardhat(t); + json(context.manifest, value); + assertInvalid(run(context.root, ['compile']), context.manifest); + }); +} + +for (const [name, value] of [ + ['null root', null], + ['array root', []], + ['null dependencies', { dependencies: null }], + ['array dependencies', { dependencies: [] }], + ['numeric dependency', { devDependencies: { hardhat: 42 } }], +]) { + test(`Hardhat rejects project ${name} with its path`, (t) => { + const context = hardhat(t); + json(context.project, value); + assertInvalid(run(context.root, ['compile']), context.project); + }); +} + +for (const name of ['project', 'manifest']) { + test(`Hardhat reports invalid ${name} JSON with its path`, (t) => { + const context = hardhat(t); + writeFileSync(context[name], '{'); + assertInvalid(run(context.root, ['compile']), context[name]); + }); +} + +test('Hardhat accepts valid dependency maps and a string bin entry', (t) => { + const context = hardhat(t); + json(context.project, { dependencies: { hardhat: '2.29.1' } }); + json(context.manifest, { version: '2.29.1', bin: 'cli.js' }); + const result = run(context.root, ['compile', '--force']); + assert.equal(result.status, 0, result.stderr); + assert.equal(result.stdout, '["compile","--force"]'); +}); + +for (const [name, modify] of [ + [ + 'null platforms', + (value) => { + value.platforms = null; + }, + ], + [ + 'array platforms', + (value) => { + value.platforms = []; + }, + ], + [ + 'null artifact', + (value) => { + value.platforms[platformKey()] = null; + }, + ], + [ + 'array artifact', + (value) => { + value.platforms[platformKey()] = []; + }, + ], + [ + 'null tools', + (value) => { + value.platforms[platformKey()].tools = null; + }, + ], + [ + 'array tools', + (value) => { + value.platforms[platformKey()].tools = []; + }, + ], + [ + 'numeric filename', + (value) => { + value.platforms[platformKey()].tools.forge = 42; + }, + ], +]) { + test(`release configuration rejects ${name} with its path`, (t) => { + const root = fixture(t, 'foundry'); + const value = JSON.parse( + readFileSync(resolve('templates/foundry/evm/foundry-toolchain.json')), + ); + modify(value); + const path = resolve(root, 'foundry-toolchain.json'); + json(path, value); + assert.throws( + () => releaseFor('evm', root), + (error) => { + assert.equal(error.exitCode, 3); + assert.ok(error.message.includes(path)); + assert.match(error.message, /invalid Foundry toolchain configuration/u); + return true; + }, + ); + }); +} From 1804eeff76730ae0c2a56ae5a022a45568c549dc Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 22:35:58 +0800 Subject: [PATCH 10/24] fix: distinguish initialization write failures from conflicts --- src/commands/init.ts | 12 ++++- src/errors.ts | 3 +- test/init-template-assets.test.js | 79 ++++++++++++++++++++++++++++++- 3 files changed, 90 insertions(+), 4 deletions(-) diff --git a/src/commands/init.ts b/src/commands/init.ts index 76e8c98..360325e 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -207,7 +207,15 @@ function writeExclusive(path: string, data: string | Buffer): void { mkdirSync(dirname(path), { recursive: true }); try { writeFileSync(path, data, { flag: 'wx' }); - } catch { - throw new CliError(`refusing to overwrite existing file ${path}`, 2); + } catch (error) { + if (error instanceof Error && 'code' in error && error.code === 'EEXIST') { + throw new CliError(`refusing to overwrite existing file ${path}`, 2, { + cause: error, + }); + } + const message = error instanceof Error ? error.message : String(error); + throw new CliError(`cannot write file ${path}: ${message}`, 6, { + cause: error, + }); } } diff --git a/src/errors.ts b/src/errors.ts index 746fb3a..d1a52c3 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -2,8 +2,9 @@ export class CliError extends Error { constructor( message: string, readonly exitCode = 2, + options?: ErrorOptions, ) { - super(message); + super(message, options); this.name = 'CliError'; } } diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js index afee23e..faf0c97 100644 --- a/test/init-template-assets.test.js +++ b/test/init-template-assets.test.js @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import { spawnSync } from 'node:child_process'; -import { +import fs, { cpSync, existsSync, mkdirSync, @@ -12,11 +12,14 @@ import { symlinkSync, writeFileSync, } from 'node:fs'; +import { syncBuiltinESMExports } from 'node:module'; import { tmpdir } from 'node:os'; import { basename, dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; +import { initProject } from '../dist/commands/init.js'; +import { CliError } from '../dist/errors.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); @@ -269,6 +272,80 @@ test('initialization preserves existing directory symlinks and rejects dangling assert.deepEqual(readdirSync(blocked), ['test']); }); +for (const code of ['EACCES', 'ENOSPC', 'EIO']) { + test(`initialization preserves ${code} write failures instead of reporting a conflict`, async (t) => { + const root = realpathSync( + mkdtempSync(resolve(tmpdir(), 'sunhat-write-error-')), + ); + t.after(() => rmSync(root, { recursive: true, force: true })); + const path = resolve(root, 'package.json'); + const original = fs.writeFileSync; + const failure = Object.assign( + new Error(`${code}: injected write failure`), + { code }, + ); + fs.writeFileSync = function (file, ...args) { + if (file === path) { + throw failure; + } + return original(file, ...args); + }; + syncBuiltinESMExports(); + try { + await assert.rejects( + initProject(['--framework', 'hardhat', '--target', 'evm', root]), + (error) => { + assert.ok(error instanceof CliError); + assert.equal(error.exitCode, 6); + assert.equal(error.cause, failure); + assert.ok(error.message.includes(path)); + assert.ok(error.message.includes(code)); + assert.match(error.message, /cannot write file/u); + assert.doesNotMatch(error.message, /refusing to overwrite/u); + return true; + }, + ); + } finally { + fs.writeFileSync = original; + syncBuiltinESMExports(); + } + assert.equal(existsSync(path), false); + }); +} + +test('a file created after preflight remains protected by exclusive creation', async (t) => { + const root = realpathSync( + mkdtempSync(resolve(tmpdir(), 'sunhat-write-race-')), + ); + t.after(() => rmSync(root, { recursive: true, force: true })); + const path = resolve(root, 'package.json'); + const original = fs.writeFileSync; + fs.writeFileSync = function (file, ...args) { + if (file === path) { + original(path, 'user-owned content', { flag: 'wx' }); + } + return original(file, ...args); + }; + syncBuiltinESMExports(); + try { + await assert.rejects( + initProject(['--framework', 'hardhat', '--target', 'evm', root]), + (error) => { + assert.ok(error instanceof CliError); + assert.equal(error.exitCode, 2); + assert.equal(error.cause.code, 'EEXIST'); + assert.ok(error.message.includes(path)); + assert.match(error.message, /refusing to overwrite/u); + return true; + }, + ); + } finally { + fs.writeFileSync = original; + syncBuiltinESMExports(); + } + assert.equal(readFileSync(path, 'utf8'), 'user-owned content'); +}); + test('adoption reads the template binding without copying the remaining scaffold', (t) => { const fixture = runtime(t); const project = resolve(fixture.temporary, 'adopted project'); From e4bad1055a027c934da297ec11250274573fa1ed Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 22:59:55 +0800 Subject: [PATCH 11/24] fix: clean up native process handlers on every exit path --- .github/workflows/ci.yml | 2 +- package.json | 2 +- src/process/spawn.ts | 39 ++++++--- test/fixtures/process-forwarding.js | 12 +++ test/process.test.js | 120 ++++++++++++++++++++++++++++ 5 files changed, 162 insertions(+), 13 deletions(-) create mode 100644 test/fixtures/process-forwarding.js create mode 100644 test/process.test.js diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 939c044..deb470a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,4 +49,4 @@ jobs: cache: npm - run: npm ci - run: npm run build - - run: node --test test/toolchain.test.js + - run: node --test test/toolchain.test.js test/process.test.js diff --git a/package.json b/package.json index 6340626..27387f8 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "build": "npm run clean && tsc -p tsconfig.json", "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"", "test": "npm run build && npm run test:runtime", - "test:runtime": "node --test test/toml.test.js test/binding.test.js test/json-boundaries.test.js test/cli.test.js test/init-commands.test.js test/init-template-assets.test.js test/toolchain.test.js", + "test:runtime": "node --test test/toml.test.js test/binding.test.js test/json-boundaries.test.js test/process.test.js test/cli.test.js test/init-commands.test.js test/init-template-assets.test.js test/toolchain.test.js", "test:templates": "npm run build && node --test test/template-types.test.js", "pack:check": "npm run build && npm pack --dry-run" }, diff --git a/src/process/spawn.ts b/src/process/spawn.ts index d4be5f4..7d739ec 100644 --- a/src/process/spawn.ts +++ b/src/process/spawn.ts @@ -1,5 +1,7 @@ import { spawn } from 'node:child_process'; +import { constants } from 'node:os'; import { CliError } from '../errors.js'; + export async function spawnNative( executable: string, args: readonly string[], @@ -18,19 +20,34 @@ export async function spawnNative( const onTerm = (): void => { child.kill('SIGTERM'); }; - process.once('SIGINT', onInt); - process.once('SIGTERM', onTerm); - child.once('error', (error) => - reject( - new CliError(`failed to start ${executable}: ${error.message}`, 6), - ), - ); - child.once('exit', (code, signal) => { + const cleanup = (): void => { process.off('SIGINT', onInt); process.off('SIGTERM', onTerm); - resolve( - code ?? (signal === 'SIGINT' ? 130 : signal === 'SIGTERM' ? 143 : 1), + child.off('error', onError); + child.off('close', onClose); + }; + const onError = (error: Error): void => { + cleanup(); + reject( + new CliError( + `failed to start ${executable} in ${cwd}: ${error.message}`, + 6, + { cause: error }, + ), ); - }); + }; + const onClose = ( + code: number | null, + signal: NodeJS.Signals | null, + ): void => { + cleanup(); + const signalNumber = + signal === null ? undefined : constants.signals[signal]; + resolve(code ?? (signalNumber === undefined ? 1 : 128 + signalNumber)); + }; + process.once('SIGINT', onInt); + process.once('SIGTERM', onTerm); + child.once('error', onError); + child.once('close', onClose); }); } diff --git a/test/fixtures/process-forwarding.js b/test/fixtures/process-forwarding.js new file mode 100644 index 0000000..d6a2000 --- /dev/null +++ b/test/fixtures/process-forwarding.js @@ -0,0 +1,12 @@ +import { spawnNative } from '../../dist/process/spawn.js'; + +const status = await spawnNative( + process.execPath, + [ + '-e', + 'setTimeout(() => process.exit(99), 5000); process.stdout.write("ready\\n");', + ], + process.cwd(), +); +process.stdout.write(`exit-code=${status}\n`); +process.exitCode = status; diff --git a/test/process.test.js b/test/process.test.js new file mode 100644 index 0000000..de88dfa --- /dev/null +++ b/test/process.test.js @@ -0,0 +1,120 @@ +import assert from 'node:assert/strict'; +import { spawn } from 'node:child_process'; +import { once } from 'node:events'; +import { mkdtempSync, readFileSync, realpathSync, rmSync } from 'node:fs'; +import { constants, tmpdir } from 'node:os'; +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import test from 'node:test'; +import { CliError } from '../dist/errors.js'; +import { spawnNative } from '../dist/process/spawn.js'; + +function temporary(t) { + const root = realpathSync(mkdtempSync(resolve(tmpdir(), 'sunhat-process-'))); + t.after(() => rmSync(root, { recursive: true, force: true })); + return root; +} +function listeners() { + return ['SIGINT', 'SIGTERM'].map((signal) => process.listeners(signal)); +} + +test('native execution preserves literal arguments, cwd, exit status, and existing listeners', async (t) => { + const root = temporary(t); + const log = resolve(root, 'arguments.json'); + const handler = () => {}; + process.on('SIGINT', handler); + t.after(() => process.off('SIGINT', handler)); + const before = listeners(); + const args = ['space value', '$HOME', '$(literal)', 'a;b', '', '--literal']; + const program = `require('node:fs').writeFileSync(${JSON.stringify(log)}, JSON.stringify({ args: process.argv.slice(1), cwd: process.cwd() })); process.exitCode = 23;`; + assert.equal( + await spawnNative(process.execPath, ['-e', program, '--', ...args], root), + 23, + ); + assert.deepEqual(JSON.parse(readFileSync(log)), { args, cwd: root }); + assert.deepEqual(listeners(), before); +}); + +test('repeated startup failures remove signal listeners and retain the original error', async (t) => { + const root = temporary(t); + const missing = resolve(root, 'missing-executable'); + const before = listeners(); + for (let attempt = 0; attempt < 3; attempt += 1) { + await assert.rejects(spawnNative(missing, [], root), (error) => { + assert.ok(error instanceof CliError); + assert.equal(error.exitCode, 6); + assert.equal(error.cause.code, 'ENOENT'); + assert.ok(error.message.includes(missing)); + return true; + }); + assert.deepEqual(listeners(), before); + } +}); + +test('a missing working directory fails without retaining signal handlers', async (t) => { + const root = temporary(t); + const missing = resolve(root, 'missing-directory'); + const before = listeners(); + await assert.rejects( + spawnNative(process.execPath, ['-e', ''], missing), + (error) => { + assert.equal(error.exitCode, 6); + assert.equal(error.cause.code, 'ENOENT'); + assert.ok(error.message.includes(missing)); + return true; + }, + ); + assert.deepEqual(listeners(), before); +}); + +test( + 'native signal termination returns the conventional signal exit code', + { skip: process.platform === 'win32' }, + async () => { + const before = listeners(); + const status = await spawnNative( + process.execPath, + ['-e', "process.kill(process.pid, 'SIGKILL');"], + process.cwd(), + ); + assert.equal(status, 128 + constants.signals.SIGKILL); + assert.deepEqual(listeners(), before); + }, +); + +for (const signal of ['SIGINT', 'SIGTERM']) { + test( + `the runner forwards ${signal} and waits for the native process`, + { skip: process.platform === 'win32', timeout: 10_000 }, + async () => { + const fixture = fileURLToPath( + new URL('./fixtures/process-forwarding.js', import.meta.url), + ); + const child = spawn(process.execPath, [fixture], { + stdio: ['ignore', 'pipe', 'pipe'], + }); + let stdout = ''; + let stderr = ''; + let forwarded = false; + child.stdout.on('data', (chunk) => { + stdout += String(chunk); + if (!forwarded && stdout.includes('ready\n')) { + forwarded = true; + child.kill(signal); + } + }); + child.stderr.on('data', (chunk) => { + stderr += String(chunk); + }); + try { + const [code, receivedSignal] = await once(child, 'close'); + assert.ok(forwarded, stderr); + assert.equal(receivedSignal, null, stderr); + assert.equal(code, 128 + constants.signals[signal], stderr); + assert.ok(stdout.includes(`exit-code=${code}`), stdout); + } finally { + child.kill('SIGKILL'); + } + }, + ); +} From 94924ba7040ad310fa6ed732ebcb1f365d339e4b Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 23:02:25 +0800 Subject: [PATCH 12/24] refactor: separate toolchain services from command handlers --- src/adapters/foundry.ts | 49 +------------ src/commands/init.ts | 15 ++-- src/commands/toolchain.ts | 137 +------------------------------------ src/toolchain/install.ts | 134 ++++++++++++++++++++++++++++++++++++ src/toolchain/lock.ts | 51 ++++++++++++++ src/toolchain/releases.ts | 3 +- test/init-commands.test.js | 24 +++++++ 7 files changed, 225 insertions(+), 188 deletions(-) create mode 100644 src/toolchain/install.ts create mode 100644 src/toolchain/lock.ts diff --git a/src/adapters/foundry.ts b/src/adapters/foundry.ts index 978103a..d57cd90 100644 --- a/src/adapters/foundry.ts +++ b/src/adapters/foundry.ts @@ -3,18 +3,8 @@ import { resolve, sep } from 'node:path'; import { toolchainError } from '../errors.js'; import type { Target } from '../project/binding.js'; import { spawnNative } from '../process/spawn.js'; -import { isRecord, readJson } from '../project/json.js'; - -type FoundryTool = 'forge' | 'cast' | 'anvil' | 'chisel'; -export interface ToolchainLock { - version: number; - target: Target; - source: string; - release: string; - revision: string; - platform: string; - binaries: Partial>; -} +import { loadToolchain } from '../toolchain/lock.js'; +import type { FoundryTool } from '../toolchain/lock.js'; export async function runFoundry( root: string, @@ -37,38 +27,3 @@ export async function runFoundry( } return await spawnNative(executable, args, root); } - -export function loadToolchain(root: string, target: Target): ToolchainLock { - const path = resolve(root, '.sunhat/toolchain.json'); - const lock = readJson( - path, - 'Foundry toolchain is not installed; run `sunhat toolchain install`', - ); - if (!isToolchainLock(lock)) { - return toolchainError(`invalid Foundry toolchain lock: ${path}`); - } - if (lock.target !== target) { - return toolchainError( - `toolchain lock ${path} does not match the ${target} project; reinstall it`, - ); - } - return lock; -} - -function isToolchainLock(value: unknown): value is ToolchainLock { - return ( - isRecord(value) && - (value.version === 1 || value.version === 2) && - (value.target === 'evm' || value.target === 'tron') && - ['source', 'release', 'revision', 'platform'].every( - (key) => typeof value[key] === 'string', - ) && - isRecord(value.binaries) && - Object.values(value.binaries).every( - (binary) => - isRecord(binary) && - typeof binary.path === 'string' && - binary.path.length > 0, - ) - ); -} diff --git a/src/commands/init.ts b/src/commands/init.ts index 360325e..a5a4240 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -13,7 +13,7 @@ import { parseArgs } from 'node:util'; import { CliError, usage } from '../errors.js'; import type { Framework, Target } from '../project/binding.js'; import { parseTarget } from '../cli/parser.js'; -import { installFoundry } from './toolchain.js'; +import { installFoundry } from '../toolchain/install.js'; interface InitOptions { framework: Framework; @@ -24,6 +24,12 @@ interface InitOptions { const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); export async function initProject(argv: readonly string[]): Promise { const options = parseOptions(argv); + if (!options) { + process.stdout.write( + 'Usage: sunhat init [--framework ] [--target ] [--adopt] [path]\nDefaults: framework=foundry, target=tron\n', + ); + return 0; + } const { framework, target } = options; const root = resolve(options.path); mkdirSync(root, { recursive: true }); @@ -60,7 +66,7 @@ export async function initProject(argv: readonly string[]): Promise { ); return 0; } -function parseOptions(argv: readonly string[]): InitOptions { +function parseOptions(argv: readonly string[]): InitOptions | undefined { try { const { values, positionals } = parseArgs({ args: [...argv], @@ -74,10 +80,7 @@ function parseOptions(argv: readonly string[]): InitOptions { strict: true, }); if (values.help) { - process.stdout.write( - 'Usage: sunhat init [--framework ] [--target ] [--adopt] [path]\nDefaults: framework=foundry, target=tron\n', - ); - return process.exit(0) as never; + return undefined; } if (positionals.length > 1) { return usage('init accepts at most one path'); diff --git a/src/commands/toolchain.ts b/src/commands/toolchain.ts index b4a9571..b693a7e 100644 --- a/src/commands/toolchain.ts +++ b/src/commands/toolchain.ts @@ -1,21 +1,7 @@ -import { createHash } from 'node:crypto'; -import { execFile } from 'node:child_process'; -import { - chmodSync, - mkdirSync, - mkdtempSync, - renameSync, - rmSync, - writeFileSync, -} from 'node:fs'; -import { resolve } from 'node:path'; -import { promisify } from 'node:util'; -import { usage, toolchainError } from '../errors.js'; +import { usage } from '../errors.js'; import type { Target } from '../project/binding.js'; -import { loadToolchain } from '../adapters/foundry.js'; -import { platformKey, releaseFor, releaseUrl } from '../toolchain/releases.js'; - -const execFileAsync = promisify(execFile); +import { installFoundry } from '../toolchain/install.js'; +import { loadToolchain } from '../toolchain/lock.js'; export async function toolchain( root: string, @@ -35,120 +21,3 @@ export async function toolchain( ); return 0; } - -export async function installFoundry( - root: string, - target: Target, -): Promise { - const release = releaseFor(target, root); - const url = releaseUrl(release); - const response = await fetch(url, { redirect: 'follow' }); - if (!response.ok) { - return toolchainError(`download failed (${response.status}): ${url}`); - } - const bytes = Buffer.from(await response.arrayBuffer()); - const digest = createHash('sha256').update(bytes).digest('hex'); - if (digest !== release.sha256) { - return toolchainError( - `archive digest mismatch: expected ${release.sha256}, got ${digest}`, - ); - } - - const toolchains = resolve(root, '.sunhat/toolchains'); - mkdirSync(toolchains, { recursive: true }); - // Stage beside the destination so every binary/directory rename stays on its filesystem. - const temporary = mkdtempSync(resolve(toolchains, `.install-${target}-`)); - let lockTemporary: string | undefined; - let preserveBackup = false; - try { - const archive = resolve(temporary, release.archive); - const extracted = resolve(temporary, 'extracted'); - mkdirSync(extracted); - writeFileSync(archive, bytes); - if (release.archive.endsWith('.zip')) { - await execFileAsync('powershell.exe', [ - '-NoProfile', - '-Command', - `Expand-Archive -LiteralPath '${archive.replaceAll("'", "''")}' -DestinationPath '${extracted.replaceAll("'", "''")}'`, - ]); - } else { - await execFileAsync('tar', ['-xzf', archive, '-C', extracted]); - } - const prepared = resolve(temporary, 'binaries'); - mkdirSync(prepared); - const binaries: Record = {}; - for (const [tool, filename] of Object.entries(release.tools)) { - const source = resolve(extracted, filename); - const output = resolve(prepared, filename); - renameSync(source, output); - chmodSync(output, 0o755); - binaries[tool] = { - path: `.sunhat/toolchains/${target}/${filename}`, - }; - } - const lock = { - version: 2, - target, - source: release.source, - release: release.release, - revision: release.revision, - platform: platformKey(), - binaries, - }; - // The lock may live on a different mount from toolchains; stage beside it too. - lockTemporary = mkdtempSync(resolve(root, '.sunhat/.toolchain-lock-')); - const preparedLock = resolve(lockTemporary, 'toolchain.json'); - writeFileSync(preparedLock, `${JSON.stringify(lock, null, 2)}\n`, { - flag: 'wx', - }); - - const destination = resolve(toolchains, target); - const backup = resolve(temporary, 'previous'); - let backedUp = false; - let activated = false; - try { - renameSync(destination, backup); - backedUp = true; - } catch (error) { - if ((error as NodeJS.ErrnoException).code !== 'ENOENT') { - throw error; - } - } - try { - renameSync(prepared, destination); - activated = true; - renameSync(preparedLock, resolve(root, '.sunhat/toolchain.json')); - } catch (error) { - try { - if (activated) { - rmSync(destination, { recursive: true, force: true }); - } - if (backedUp) { - renameSync(backup, destination); - } - } catch (rollbackError) { - // Never remove the only remaining copy when restoring the old directory fails. - preserveBackup = backedUp; - return toolchainError( - `installation failed: ${errorMessage(error)}; rollback failed: ${errorMessage(rollbackError)}${backedUp ? `; previous toolchain preserved at ${backup}` : ''}`, - ); - } - throw error; - } - process.stderr.write( - `installed ${release.source}@${release.revision} from ${url}\n`, - ); - return 0; - } finally { - if (!preserveBackup) { - rmSync(temporary, { recursive: true, force: true }); - } - if (lockTemporary) { - rmSync(lockTemporary, { recursive: true, force: true }); - } - } -} - -function errorMessage(error: unknown): string { - return error instanceof Error ? error.message : String(error); -} diff --git a/src/toolchain/install.ts b/src/toolchain/install.ts new file mode 100644 index 0000000..a9ea61d --- /dev/null +++ b/src/toolchain/install.ts @@ -0,0 +1,134 @@ +import { createHash } from 'node:crypto'; +import { execFile } from 'node:child_process'; +import { + chmodSync, + mkdirSync, + mkdtempSync, + renameSync, + rmSync, + writeFileSync, +} from 'node:fs'; +import { resolve } from 'node:path'; +import { promisify } from 'node:util'; +import { toolchainError } from '../errors.js'; +import type { Target } from '../project/binding.js'; +import { platformKey, releaseFor, releaseUrl } from './releases.js'; + +const execFileAsync = promisify(execFile); + +export async function installFoundry( + root: string, + target: Target, +): Promise { + const release = releaseFor(target, root); + const url = releaseUrl(release); + const response = await fetch(url, { redirect: 'follow' }); + if (!response.ok) { + return toolchainError(`download failed (${response.status}): ${url}`); + } + const bytes = Buffer.from(await response.arrayBuffer()); + const digest = createHash('sha256').update(bytes).digest('hex'); + if (digest !== release.sha256) { + return toolchainError( + `archive digest mismatch: expected ${release.sha256}, got ${digest}`, + ); + } + + const toolchains = resolve(root, '.sunhat/toolchains'); + mkdirSync(toolchains, { recursive: true }); + // Stage beside the destination so every binary/directory rename stays on its filesystem. + const temporary = mkdtempSync(resolve(toolchains, `.install-${target}-`)); + let lockTemporary: string | undefined; + let preserveBackup = false; + try { + const archive = resolve(temporary, release.archive); + const extracted = resolve(temporary, 'extracted'); + mkdirSync(extracted); + writeFileSync(archive, bytes); + if (release.archive.endsWith('.zip')) { + await execFileAsync('powershell.exe', [ + '-NoProfile', + '-Command', + `Expand-Archive -LiteralPath '${archive.replaceAll("'", "''")}' -DestinationPath '${extracted.replaceAll("'", "''")}'`, + ]); + } else { + await execFileAsync('tar', ['-xzf', archive, '-C', extracted]); + } + const prepared = resolve(temporary, 'binaries'); + mkdirSync(prepared); + const binaries: Record = {}; + for (const [tool, filename] of Object.entries(release.tools)) { + const source = resolve(extracted, filename); + const output = resolve(prepared, filename); + renameSync(source, output); + chmodSync(output, 0o755); + binaries[tool] = { + path: `.sunhat/toolchains/${target}/${filename}`, + }; + } + const lock = { + version: 2, + target, + source: release.source, + release: release.release, + revision: release.revision, + platform: platformKey(), + binaries, + }; + // The lock may live on a different mount from toolchains; stage beside it too. + lockTemporary = mkdtempSync(resolve(root, '.sunhat/.toolchain-lock-')); + const preparedLock = resolve(lockTemporary, 'toolchain.json'); + writeFileSync(preparedLock, `${JSON.stringify(lock, null, 2)}\n`, { + flag: 'wx', + }); + + const destination = resolve(toolchains, target); + const backup = resolve(temporary, 'previous'); + let backedUp = false; + let activated = false; + try { + renameSync(destination, backup); + backedUp = true; + } catch (error) { + if ((error as NodeJS.ErrnoException).code !== 'ENOENT') { + throw error; + } + } + try { + renameSync(prepared, destination); + activated = true; + renameSync(preparedLock, resolve(root, '.sunhat/toolchain.json')); + } catch (error) { + try { + if (activated) { + rmSync(destination, { recursive: true, force: true }); + } + if (backedUp) { + renameSync(backup, destination); + } + } catch (rollbackError) { + // Never remove the only remaining copy when restoring the old directory fails. + preserveBackup = backedUp; + return toolchainError( + `installation failed: ${errorMessage(error)}; rollback failed: ${errorMessage(rollbackError)}${backedUp ? `; previous toolchain preserved at ${backup}` : ''}`, + ); + } + throw error; + } + process.stderr.write( + `installed ${release.source}@${release.revision} from ${url}\n`, + ); + return 0; + } finally { + if (!preserveBackup) { + rmSync(temporary, { recursive: true, force: true }); + } + if (lockTemporary) { + rmSync(lockTemporary, { recursive: true, force: true }); + } + } +} + +function errorMessage(error: unknown): string { + return error instanceof Error ? error.message : String(error); +} diff --git a/src/toolchain/lock.ts b/src/toolchain/lock.ts new file mode 100644 index 0000000..a2e3dd2 --- /dev/null +++ b/src/toolchain/lock.ts @@ -0,0 +1,51 @@ +import { resolve } from 'node:path'; +import { toolchainError } from '../errors.js'; +import type { Target } from '../project/binding.js'; +import { isRecord, readJson } from '../project/json.js'; + +export type FoundryTool = 'forge' | 'cast' | 'anvil' | 'chisel'; + +export interface ToolchainLock { + version: number; + target: Target; + source: string; + release: string; + revision: string; + platform: string; + binaries: Partial>; +} + +export function loadToolchain(root: string, target: Target): ToolchainLock { + const path = resolve(root, '.sunhat/toolchain.json'); + const lock = readJson( + path, + 'Foundry toolchain is not installed; run `sunhat toolchain install`', + ); + if (!isToolchainLock(lock)) { + return toolchainError(`invalid Foundry toolchain lock: ${path}`); + } + if (lock.target !== target) { + return toolchainError( + `toolchain lock ${path} does not match the ${target} project; reinstall it`, + ); + } + return lock; +} + +function isToolchainLock(value: unknown): value is ToolchainLock { + return ( + isRecord(value) && + (value.version === 1 || value.version === 2) && + (value.target === 'evm' || value.target === 'tron') && + ['source', 'release', 'revision', 'platform'].every( + (key) => typeof value[key] === 'string', + ) && + isRecord(value.binaries) && + Object.values(value.binaries).every( + (binary) => + isRecord(binary) && + typeof binary.path === 'string' && + binary.path.length > 0, + ) + ); +} diff --git a/src/toolchain/releases.ts b/src/toolchain/releases.ts index 23e2c64..e0e9636 100644 --- a/src/toolchain/releases.ts +++ b/src/toolchain/releases.ts @@ -4,6 +4,7 @@ import { fileURLToPath } from 'node:url'; import type { Target } from '../project/binding.js'; import { toolchainError } from '../errors.js'; import { isRecord, readJson } from '../project/json.js'; +import type { FoundryTool } from './lock.js'; export interface Release { source: string; @@ -11,7 +12,7 @@ export interface Release { revision: string; archive: string; sha256: string; - tools: Record<'forge' | 'cast' | 'anvil' | 'chisel', string>; + tools: Record; } const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); diff --git a/test/init-commands.test.js b/test/init-commands.test.js index c59589b..33c9702 100644 --- a/test/init-commands.test.js +++ b/test/init-commands.test.js @@ -34,6 +34,30 @@ const releases = { }, }; +for (const flag of ['--help', '-h']) { + test(`init ${flag} returns to its caller without creating a project`, (t) => { + const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-init-help-')); + t.after(() => rmSync(temporary, { recursive: true, force: true })); + const destination = resolve(temporary, 'unused-project'); + const moduleUrl = new URL('../dist/commands/init.js', import.meta.url).href; + const program = ` + import { initProject } from ${JSON.stringify(moduleUrl)}; + const status = await initProject(${JSON.stringify([flag, destination])}); + process.stdout.write('returned:' + status + '\\n'); + `; + const result = spawnSync( + process.execPath, + ['--input-type=module', '-e', program], + { cwd: temporary, encoding: 'utf8', timeout: 10_000 }, + ); + assert.equal(result.status, 0, result.stderr); + assert.equal(result.stderr, ''); + assert.match(result.stdout, /Usage: sunhat init/u); + assert.match(result.stdout, /returned:0\n$/u); + assert.equal(existsSync(destination), false); + }); +} + // Cover the template commands and every routing branch. Native frameworks own // their full task lists; these executables record dispatch without compiling or // broadcasting transactions, starting servers, or requiring Docker/network access. From 917cab0c6fae48ca1eea9509fff30850d2c4e7bf Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 23:05:04 +0800 Subject: [PATCH 13/24] chore: strengthen source quality gates and error handling --- README.md | 2 ++ eslint.config.js | 14 ++++++++++++++ src/adapters/hardhat.ts | 14 +++++++------- src/bin/sunhat.ts | 7 +++---- src/cli/parser.ts | 3 +++ src/cli/router.ts | 2 ++ src/commands/init.ts | 23 ++++++++++++++++------- src/errors.ts | 23 +++++++++++++++++++---- src/project/binding.ts | 18 ++++++++++++------ src/project/json.ts | 17 +++++++---------- src/project/root.ts | 1 + src/toolchain/install.ts | 9 +++------ src/toolchain/releases.ts | 5 +++++ tsconfig.json | 5 +++++ 14 files changed, 99 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 5c9b8df..3c338c2 100644 --- a/README.md +++ b/README.md @@ -44,4 +44,6 @@ npm test `npm run test:templates` installs fresh Hardhat EVM/TRON projects and runs `tsc --noEmit`. `npm run pack:check` checks package contents. Runtime tests use framework and download fixtures. +Source builds reject unused declarations, incomplete return paths, and switch fallthrough. ESLint uses type information for `src/` to catch unhandled promises, async callbacks in synchronous APIs, and unsafe type assertions. Template linting does not require installing each generated project's dependencies. + Initialization files and Foundry release data live under `templates//common/` and `templates///`. Target files override matching common files. The [TOML compatibility note](docs/toml-binding.md) documents the binding syntax baseline and parser limits. diff --git a/eslint.config.js b/eslint.config.js index 9650d60..969e95e 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -34,6 +34,20 @@ export default defineConfig([ '@typescript-eslint/consistent-type-imports': 'error', }, }, + { + files: ['src/**/*.ts'], + languageOptions: { + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + rules: { + '@typescript-eslint/no-floating-promises': 'error', + '@typescript-eslint/no-misused-promises': 'error', + '@typescript-eslint/no-unsafe-type-assertion': 'error', + }, + }, { files: ['templates/hardhat/**/test/**/*.ts'], languageOptions: { globals: globals.mocha }, diff --git a/src/adapters/hardhat.ts b/src/adapters/hardhat.ts index d306aa7..c1ff269 100644 --- a/src/adapters/hardhat.ts +++ b/src/adapters/hardhat.ts @@ -1,15 +1,17 @@ import { createRequire } from 'node:module'; import { dirname, isAbsolute, resolve, sep } from 'node:path'; import { existsSync, realpathSync } from 'node:fs'; -import { toolchainError } from '../errors.js'; +import { errorMessage, hasErrorCode, toolchainError } from '../errors.js'; import { spawnNative } from '../process/spawn.js'; import { isRecord, readJson } from '../project/json.js'; + interface PackageJson { version?: string; bin?: string | Record; dependencies?: Record; devDependencies?: Record; } + export async function runHardhat( root: string, args: readonly string[], @@ -33,17 +35,15 @@ export async function runHardhat( readPackageJson(path); } } - if ( - error instanceof Error && - 'code' in error && - error.code === 'ERR_INVALID_PACKAGE_CONFIG' - ) { + if (hasErrorCode(error, 'ERR_INVALID_PACKAGE_CONFIG')) { return toolchainError( - `cannot resolve Hardhat in ${root}: ${error.message}`, + `cannot resolve Hardhat in ${root}: ${errorMessage(error)}`, + { cause: error }, ); } return toolchainError( 'local Hardhat dependency is missing; install the project lockfile dependencies', + { cause: error }, ); } const manifest = readPackageJson(manifestPath); diff --git a/src/bin/sunhat.ts b/src/bin/sunhat.ts index 9d3e94b..aac1d45 100644 --- a/src/bin/sunhat.ts +++ b/src/bin/sunhat.ts @@ -1,7 +1,8 @@ #!/usr/bin/env node import { parse } from '../cli/parser.js'; import { route } from '../cli/router.js'; -import { CliError } from '../errors.js'; +import { CliError, errorMessage } from '../errors.js'; + try { process.exitCode = await route(parse(process.argv.slice(2))); } catch (error) { @@ -9,9 +10,7 @@ try { process.stderr.write(`sunhat: ${error.message}\n`); process.exitCode = error.exitCode; } else { - process.stderr.write( - `sunhat: ${error instanceof Error ? error.message : String(error)}\n`, - ); + process.stderr.write(`sunhat: ${errorMessage(error)}\n`); process.exitCode = 6; } } diff --git a/src/cli/parser.ts b/src/cli/parser.ts index 5ea223a..1463cee 100644 --- a/src/cli/parser.ts +++ b/src/cli/parser.ts @@ -1,10 +1,12 @@ import { usage } from '../errors.js'; import type { Target } from '../project/binding.js'; + export type Invocation = | { kind: 'help' } | { kind: 'version' } | { kind: 'init'; args: string[] } | { kind: 'run'; command: string; args: string[] }; + export function parse(argv: readonly string[]): Invocation { if ( argv.length === 0 || @@ -29,6 +31,7 @@ export function parse(argv: readonly string[]): Invocation { } return { kind: 'run', command, args: argv.slice(1) }; } + export function parseTarget(value: string): Target { if (value !== 'tron' && value !== 'evm') { return usage(`invalid target ${value}; expected tron or evm`); diff --git a/src/cli/router.ts b/src/cli/router.ts index 8c8128d..d2de746 100644 --- a/src/cli/router.ts +++ b/src/cli/router.ts @@ -7,6 +7,7 @@ import { usage } from '../errors.js'; import { readBinding } from '../project/binding.js'; import { findProjectRoot } from '../project/root.js'; import type { Invocation } from './parser.js'; + export const HELP = `Sunhat project-bound framework CLI Usage: @@ -15,6 +16,7 @@ Usage: Init defaults: framework=foundry, target=tron `; + export async function route(invocation: Invocation): Promise { if (invocation.kind === 'help') { process.stdout.write(HELP); diff --git a/src/commands/init.ts b/src/commands/init.ts index a5a4240..056921e 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -10,7 +10,7 @@ import { import { basename, dirname, join, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import { parseArgs } from 'node:util'; -import { CliError, usage } from '../errors.js'; +import { CliError, errorMessage, hasErrorCode, usage } from '../errors.js'; import type { Framework, Target } from '../project/binding.js'; import { parseTarget } from '../cli/parser.js'; import { installFoundry } from '../toolchain/install.js'; @@ -21,7 +21,9 @@ interface InitOptions { path: string; adopt: boolean; } + const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); + export async function initProject(argv: readonly string[]): Promise { const options = parseOptions(argv); if (!options) { @@ -54,10 +56,10 @@ export async function initProject(argv: readonly string[]): Promise { try { await installFoundry(root, target); } catch (error) { - const message = error instanceof Error ? error.message : String(error); throw new CliError( - `${message}; project files are in ${root}; retry with \`sunhat toolchain install\``, + `${errorMessage(error)}; project files are in ${root}; retry with \`sunhat toolchain install\``, error instanceof CliError ? error.exitCode : 6, + { cause: error }, ); } } @@ -66,6 +68,7 @@ export async function initProject(argv: readonly string[]): Promise { ); return 0; } + function parseOptions(argv: readonly string[]): InitOptions | undefined { try { const { values, positionals } = parseArgs({ @@ -99,9 +102,10 @@ function parseOptions(argv: readonly string[]): InitOptions | undefined { if (error instanceof CliError) { throw error; } - return usage(error instanceof Error ? error.message : String(error)); + return usage(errorMessage(error), { cause: error }); } } + function validateNativeProject(root: string, framework: Framework): void { const found = framework === 'foundry' @@ -116,6 +120,7 @@ function validateNativeProject(root: string, framework: Framework): void { ); } } + function scaffold(root: string, framework: Framework, target: Target): void { const source = resolve(packageRoot, 'templates', framework); const files = new Map(); @@ -142,6 +147,7 @@ function scaffold(root: string, framework: Framework, target: Target): void { writeExclusive(file.path, file.data); } } + function validateParentDirectories( directory: string, root: string, @@ -169,6 +175,7 @@ function validateParentDirectories( checked.add(path); } } + function collectTemplates( directory: string, relativePath: string, @@ -186,6 +193,7 @@ function collectTemplates( } } } + function renderTemplate(path: string, root: string): string | Buffer { const contents = readFileSync(path); if (!path.endsWith('.json')) { @@ -203,21 +211,22 @@ function renderTemplate(path: string, root: string): string | Buffer { (_match, key: keyof typeof values) => JSON.stringify(values[key]), ); } + function copyExclusive(from: string, to: string): void { writeExclusive(to, readFileSync(from)); } + function writeExclusive(path: string, data: string | Buffer): void { mkdirSync(dirname(path), { recursive: true }); try { writeFileSync(path, data, { flag: 'wx' }); } catch (error) { - if (error instanceof Error && 'code' in error && error.code === 'EEXIST') { + if (hasErrorCode(error, 'EEXIST')) { throw new CliError(`refusing to overwrite existing file ${path}`, 2, { cause: error, }); } - const message = error instanceof Error ? error.message : String(error); - throw new CliError(`cannot write file ${path}: ${message}`, 6, { + throw new CliError(`cannot write file ${path}: ${errorMessage(error)}`, 6, { cause: error, }); } diff --git a/src/errors.ts b/src/errors.ts index d1a52c3..e87e448 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -8,9 +8,24 @@ export class CliError extends Error { this.name = 'CliError'; } } -export function usage(message: string): never { - throw new CliError(message, 2); + +export function errorMessage(error: unknown): string { + return error instanceof Error ? error.message : String(error); } -export function toolchainError(message: string): never { - throw new CliError(message, 3); + +export function hasErrorCode(error: unknown, code: string): boolean { + return ( + typeof error === 'object' && + error !== null && + 'code' in error && + error.code === code + ); +} + +export function usage(message: string, options?: ErrorOptions): never { + throw new CliError(message, 2, options); +} + +export function toolchainError(message: string, options?: ErrorOptions): never { + throw new CliError(message, 3, options); } diff --git a/src/project/binding.ts b/src/project/binding.ts index de05dd8..f096f7a 100644 --- a/src/project/binding.ts +++ b/src/project/binding.ts @@ -1,27 +1,35 @@ import { readFileSync } from 'node:fs'; -import { CliError } from '../errors.js'; +import { CliError, errorMessage } from '../errors.js'; import { parseToml } from './toml.js'; + export type Framework = 'hardhat' | 'foundry'; export type Target = 'tron' | 'evm'; + export interface Binding { framework: Framework; target: Target; } + export function readBinding(path: string): Binding { let text: string; try { text = readFileSync(path, 'utf8'); } catch (error) { - throw new CliError(`cannot read ${path}: ${msg(error)}`, 4); + throw new CliError(`cannot read ${path}: ${errorMessage(error)}`, 4, { + cause: error, + }); } let document: unknown; try { document = parseToml(text); } catch (error) { - throw new CliError(`invalid TOML in ${path}: ${msg(error)}`, 4); + throw new CliError(`invalid TOML in ${path}: ${errorMessage(error)}`, 4, { + cause: error, + }); } return validateBinding(document, path); } + export function validateBinding(document: unknown, path: string): Binding { const project = isTable(document) ? document.project : undefined; if (!isTable(project)) { @@ -42,6 +50,7 @@ export function validateBinding(document: unknown, path: string): Binding { } return { framework, target }; } + function isTable(value: unknown): value is Record { if (typeof value !== 'object' || value === null) { return false; @@ -49,6 +58,3 @@ function isTable(value: unknown): value is Record { const prototype: unknown = Object.getPrototypeOf(value); return prototype === Object.prototype || prototype === null; } -function msg(error: unknown): string { - return error instanceof Error ? error.message : String(error); -} diff --git a/src/project/json.ts b/src/project/json.ts index 8ddc274..36f8063 100644 --- a/src/project/json.ts +++ b/src/project/json.ts @@ -1,20 +1,17 @@ import { readFileSync } from 'node:fs'; -import { toolchainError } from '../errors.js'; +import { errorMessage, hasErrorCode, toolchainError } from '../errors.js'; export function readJson(path: string, missingMessage?: string): unknown { try { return JSON.parse(readFileSync(path, 'utf8')); } catch (error) { - if ( - missingMessage && - error instanceof Error && - 'code' in error && - error.code === 'ENOENT' - ) { - return toolchainError(missingMessage); + if (missingMessage && hasErrorCode(error, 'ENOENT')) { + return toolchainError(missingMessage, { cause: error }); } - const message = error instanceof Error ? error.message : String(error); - return toolchainError(`cannot read JSON file ${path}: ${message}`); + return toolchainError( + `cannot read JSON file ${path}: ${errorMessage(error)}`, + { cause: error }, + ); } } diff --git a/src/project/root.ts b/src/project/root.ts index ce8a6af..e4a911f 100644 --- a/src/project/root.ts +++ b/src/project/root.ts @@ -1,6 +1,7 @@ import { existsSync } from 'node:fs'; import { dirname, parse, resolve } from 'node:path'; import { CliError } from '../errors.js'; + export function findProjectRoot(start: string): string { let current = resolve(start); const filesystemRoot = parse(current).root; diff --git a/src/toolchain/install.ts b/src/toolchain/install.ts index a9ea61d..587c945 100644 --- a/src/toolchain/install.ts +++ b/src/toolchain/install.ts @@ -10,7 +10,7 @@ import { } from 'node:fs'; import { resolve } from 'node:path'; import { promisify } from 'node:util'; -import { toolchainError } from '../errors.js'; +import { errorMessage, hasErrorCode, toolchainError } from '../errors.js'; import type { Target } from '../project/binding.js'; import { platformKey, releaseFor, releaseUrl } from './releases.js'; @@ -90,7 +90,7 @@ export async function installFoundry( renameSync(destination, backup); backedUp = true; } catch (error) { - if ((error as NodeJS.ErrnoException).code !== 'ENOENT') { + if (!hasErrorCode(error, 'ENOENT')) { throw error; } } @@ -111,6 +111,7 @@ export async function installFoundry( preserveBackup = backedUp; return toolchainError( `installation failed: ${errorMessage(error)}; rollback failed: ${errorMessage(rollbackError)}${backedUp ? `; previous toolchain preserved at ${backup}` : ''}`, + { cause: error }, ); } throw error; @@ -128,7 +129,3 @@ export async function installFoundry( } } } - -function errorMessage(error: unknown): string { - return error instanceof Error ? error.message : String(error); -} diff --git a/src/toolchain/releases.ts b/src/toolchain/releases.ts index e0e9636..2b57ca3 100644 --- a/src/toolchain/releases.ts +++ b/src/toolchain/releases.ts @@ -14,11 +14,13 @@ export interface Release { sha256: string; tools: Record; } + const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); export function platformKey(): string { return `${process.platform}-${process.arch === 'x64' ? 'amd64' : process.arch}`; } + export function releaseFor(target: Target, root?: string): Release { const local = root ? resolve(root, 'foundry-toolchain.json') : undefined; const path = @@ -73,6 +75,7 @@ export function releaseFor(target: Target, root?: string): Release { tools: artifact.tools, }; } + function isToolMap(value: unknown): value is Release['tools'] { return ( isRecord(value) && @@ -82,6 +85,7 @@ function isToolMap(value: unknown): value is Release['tools'] { ) ); } + function isFilename(value: unknown): value is string { return ( typeof value === 'string' && @@ -92,6 +96,7 @@ function isFilename(value: unknown): value is string { !value.includes('\\') ); } + export function releaseUrl(release: Release): string { return `https://github.com/${release.source}/releases/download/${release.release}/${release.archive}`; } diff --git a/tsconfig.json b/tsconfig.json index b8520f2..72aec1a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,11 @@ "strict": true, "noUncheckedIndexedAccess": true, "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "verbatimModuleSyntax": true, "declaration": true, "sourceMap": true, "skipLibCheck": true From 100325aa6b5e00fa5c0485d2d15d877bb0ddbbde Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 23:20:01 +0800 Subject: [PATCH 14/24] fix: preserve installation results when temporary cleanup fails --- src/toolchain/install.ts | 15 +++- test/fixtures/toolchain-install-faults.js | 33 ++++++-- test/toolchain.test.js | 99 +++++++++++++++++------ 3 files changed, 116 insertions(+), 31 deletions(-) diff --git a/src/toolchain/install.ts b/src/toolchain/install.ts index 587c945..dbb3359 100644 --- a/src/toolchain/install.ts +++ b/src/toolchain/install.ts @@ -122,10 +122,21 @@ export async function installFoundry( return 0; } finally { if (!preserveBackup) { - rmSync(temporary, { recursive: true, force: true }); + removeTemporaryDirectory(temporary); } if (lockTemporary) { - rmSync(lockTemporary, { recursive: true, force: true }); + removeTemporaryDirectory(lockTemporary); } } } + +function removeTemporaryDirectory(path: string): void { + try { + rmSync(path, { recursive: true, force: true }); + } catch (error) { + // Cleanup must not replace the installation result or prevent further cleanup. + process.stderr.write( + `warning: cannot remove temporary directory ${path}: ${errorMessage(error)}\n`, + ); + } +} diff --git a/test/fixtures/toolchain-install-faults.js b/test/fixtures/toolchain-install-faults.js index 5ae526e..3430ce0 100644 --- a/test/fixtures/toolchain-install-faults.js +++ b/test/fixtures/toolchain-install-faults.js @@ -1,6 +1,13 @@ import fs from 'node:fs'; import { syncBuiltinESMExports } from 'node:module'; -import { basename, isAbsolute, relative, resolve, sep } from 'node:path'; +import { + basename, + dirname, + isAbsolute, + relative, + resolve, + sep, +} from 'node:path'; const root = process.env.SUNHAT_TEST_PROJECT_ROOT; const toolchains = resolve(root, '.sunhat/toolchains'); @@ -9,6 +16,7 @@ const lock = resolve(root, '.sunhat/toolchain.json'); const mode = process.env.SUNHAT_TEST_INSTALL_FAULT; const rename = fs.renameSync; const write = fs.writeFileSync; +const remove = fs.rmSync; function inside(parent, path) { const child = relative(parent, path); @@ -23,8 +31,8 @@ function device(path) { ? 'project' : 'os-temp'; } -function failure(code) { - return Object.assign(new Error(`injected ${mode} failure (${code})`), { +function failure(code, stage = mode) { + return Object.assign(new Error(`injected ${stage} failure (${code})`), { code, }); } @@ -39,14 +47,16 @@ fs.renameSync = (from, to) => { } const restoring = basename(from) === 'previous'; if ( - (mode === 'activate' || mode === 'rollback') && + ['activate', 'rollback', 'activate-cleanup', 'rollback-cleanup'].includes( + mode, + ) && inside(destination, to) && !inside(destination, from) && !restoring ) { throw failure('EIO'); } - if (mode === 'rollback' && restoring) { + if (['rollback', 'rollback-cleanup'].includes(mode) && restoring) { throw failure('EACCES'); } if (mode === 'lock' && to === lock) { @@ -63,4 +73,17 @@ fs.writeFileSync = (path, ...args) => { return write(path, ...args); }; +fs.rmSync = (path, ...args) => { + if ( + (['cleanup', 'activate-cleanup'].includes(mode) && + dirname(path) === toolchains && + basename(path).startsWith('.install-')) || + (mode === 'rollback-cleanup' && + basename(path).startsWith('.toolchain-lock-')) + ) { + throw failure('EACCES', 'cleanup'); + } + return remove(path, ...args); +}; + syncBuiltinESMExports(); diff --git a/test/toolchain.test.js b/test/toolchain.test.js index d0e1da9..173f88a 100644 --- a/test/toolchain.test.js +++ b/test/toolchain.test.js @@ -408,37 +408,88 @@ for (const target of ['evm', 'tron']) { }); } - test(`${target} failed rollback retains a recoverable backup`, (t) => { + test(`${target} cleanup failure preserves a successful installation and cleans the remaining stage`, (t) => { const fixture = installFixture(t, target); - assertInstalled(install(fixture)); const previous = snapshot(fixture.root); writeArchive(fixture, { label: 'replacement' }); - const rejected = install(fixture, 'rollback'); - assert.notEqual(rejected.status, 0); - const toolchains = resolve(fixture.root, '.sunhat/toolchains'); - const stages = readdirSync(toolchains).filter((name) => - name.startsWith(`.install-${target}-`), - ); - assert.equal(stages.length, 1); - const backup = resolve(toolchains, stages[0], 'previous'); - assert.ok( - rejected.stderr.includes(`previous toolchain preserved at ${backup}`), - rejected.stderr, - ); - assert.deepEqual( - readFileSync(resolve(fixture.root, '.sunhat/toolchain.json')), - previous.lock, - ); - for (const [path, bytes] of Object.entries(previous.binaries)) { - assert.deepEqual( - readFileSync(resolve(backup, path.split('/').at(-1))), - bytes, - ); + const result = install(fixture, 'cleanup'); + assertInstalled(result); + assert.match(result.stderr, /warning: cannot remove temporary directory/u); + assert.match(result.stderr, /injected cleanup failure/u); + const installed = snapshot(fixture.root); + for (const [path, bytes] of Object.entries(installed.binaries)) { + assert.notDeepEqual(bytes, previous.binaries[path]); + assert.deepEqual(bytes, fixture.contents[path.split('/').at(-1)]); } - renameSync(backup, resolve(toolchains, target)); + assertPreserved(fixture.root, installed); + assert.deepEqual(readdirSync(resolve(fixture.root, '.sunhat')).sort(), [ + 'toolchain.json', + 'toolchains', + ]); + const stage = readdirSync(resolve(fixture.root, '.sunhat/toolchains')).find( + (name) => name.startsWith('.install-'), + ); + assert.ok(stage); + assert.ok(result.stderr.includes(stage)); + }); + + test(`${target} cleanup failure does not mask the installation error`, (t) => { + const fixture = installFixture(t, target); + const previous = snapshot(fixture.root); + writeArchive(fixture, { label: 'replacement' }); + const result = install(fixture, 'activate-cleanup'); + assert.equal(result.status, 6, result.stderr); + assert.match(result.stderr, /sunhat: injected activate-cleanup failure/u); + assert.match(result.stderr, /warning: cannot remove temporary directory/u); + assert.match(result.stderr, /injected cleanup failure/u); assertPreserved(fixture.root, previous); + assert.deepEqual(readdirSync(resolve(fixture.root, '.sunhat')).sort(), [ + 'toolchain.json', + 'toolchains', + ]); }); + for (const fault of ['rollback', 'rollback-cleanup']) { + test(`${target} ${fault} failure retains a recoverable backup`, (t) => { + const fixture = installFixture(t, target); + assertInstalled(install(fixture)); + const previous = snapshot(fixture.root); + writeArchive(fixture, { label: 'replacement' }); + const rejected = install(fixture, fault); + assert.equal(rejected.status, 3, rejected.stderr); + assert.match(rejected.stderr, /rollback failed/u); + if (fault === 'rollback-cleanup') { + assert.match( + rejected.stderr, + /warning: cannot remove temporary directory/u, + ); + assert.match(rejected.stderr, /injected cleanup failure/u); + } + const toolchains = resolve(fixture.root, '.sunhat/toolchains'); + const stages = readdirSync(toolchains).filter((name) => + name.startsWith(`.install-${target}-`), + ); + assert.equal(stages.length, 1); + const backup = resolve(toolchains, stages[0], 'previous'); + assert.ok( + rejected.stderr.includes(`previous toolchain preserved at ${backup}`), + rejected.stderr, + ); + assert.deepEqual( + readFileSync(resolve(fixture.root, '.sunhat/toolchain.json')), + previous.lock, + ); + for (const [path, bytes] of Object.entries(previous.binaries)) { + assert.deepEqual( + readFileSync(resolve(backup, path.split('/').at(-1))), + bytes, + ); + } + renameSync(backup, resolve(toolchains, target)); + assertPreserved(fixture.root, previous); + }); + } + test( `${target} installs on a different Linux filesystem from OS temp`, { skip: process.platform !== 'linux' }, From f22b006ddc6ccba7148e281f7c6a20c82205fddd Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 23:21:52 +0800 Subject: [PATCH 15/24] fix: validate adopted project paths before writing configuration --- src/commands/init.ts | 22 +++++-- test/init-template-assets.test.js | 98 +++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 5 deletions(-) diff --git a/src/commands/init.ts b/src/commands/init.ts index 056921e..f6b5cc8 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -34,13 +34,16 @@ export async function initProject(argv: readonly string[]): Promise { } const { framework, target } = options; const root = resolve(options.path); - mkdirSync(root, { recursive: true }); - if (existsSync(resolve(root, 'sunhat.toml'))) { + if (options.adopt) { + validateNativeProject(root, framework); + } else { + mkdirSync(root, { recursive: true }); + } + if (lstatSync(resolve(root, 'sunhat.toml'), { throwIfNoEntry: false })) { return usage(`${root} is already bound by sunhat.toml`); } const template = resolve(packageRoot, 'templates', framework, target); if (options.adopt) { - validateNativeProject(root, framework); const configuration = resolve(root, 'foundry-toolchain.json'); if (framework === 'foundry' && !existsSync(configuration)) { copyExclusive(resolve(template, 'foundry-toolchain.json'), configuration); @@ -107,11 +110,20 @@ function parseOptions(argv: readonly string[]): InitOptions | undefined { } function validateNativeProject(root: string, framework: Framework): void { + if (!statSync(root, { throwIfNoEntry: false })?.isDirectory()) { + return usage( + `cannot adopt ${framework}: project directory not found at ${root}`, + ); + } const found = framework === 'foundry' - ? existsSync(resolve(root, 'foundry.toml')) + ? statSync(resolve(root, 'foundry.toml'), { + throwIfNoEntry: false, + })?.isFile() : ['js', 'cjs', 'ts'].some((ext) => - existsSync(resolve(root, `hardhat.config.${ext}`)), + statSync(resolve(root, `hardhat.config.${ext}`), { + throwIfNoEntry: false, + })?.isFile(), ); if (!found) { throw new CliError( diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js index faf0c97..8b7a400 100644 --- a/test/init-template-assets.test.js +++ b/test/init-template-assets.test.js @@ -384,3 +384,101 @@ test('adoption reads the template binding without copying the remaining scaffold assert.equal(existsSync(resolve(project, name)), false); } }); + +for (const framework of ['hardhat', 'foundry']) { + const native = framework === 'hardhat' ? 'hardhat.config.ts' : 'foundry.toml'; + + test(`${framework} adoption rejects invalid native configuration paths without writing`, (t) => { + const fixture = runtime(t); + for (const kind of ['directory', 'dangling-link', 'missing']) { + const project = resolve(fixture.temporary, kind); + mkdirSync(project); + const path = resolve(project, native); + if (kind === 'directory') { + mkdirSync(path); + } else if (kind === 'dangling-link') { + symlinkSync(resolve(fixture.temporary, 'absent-config'), path, 'file'); + } + const before = readdirSync(project); + const result = run(fixture, [ + '--framework', + framework, + '--target', + 'evm', + '--adopt', + project, + ]); + assert.equal(result.status, 2, result.stderr); + assert.match(result.stderr, /native configuration not found/u); + assert.deepEqual(readdirSync(project), before); + } + }); + + test(`${framework} adoption requires an existing project directory`, (t) => { + const fixture = runtime(t); + const missingParent = resolve(fixture.temporary, 'missing-parent'); + const result = run(fixture, [ + '--framework', + framework, + '--adopt', + resolve(missingParent, 'project'), + ]); + assert.equal(result.status, 2, result.stderr); + assert.equal(existsSync(missingParent), false); + + const file = resolve(fixture.temporary, 'owned-file'); + writeFileSync(file, 'user-owned content'); + const rejected = run(fixture, ['--framework', framework, '--adopt', file]); + assert.equal(rejected.status, 2, rejected.stderr); + assert.equal(readFileSync(file, 'utf8'), 'user-owned content'); + }); + + test(`${framework} adoption rejects an existing dangling binding before copying configuration`, (t) => { + const fixture = runtime(t); + const project = resolve(fixture.temporary, 'bound-project'); + mkdirSync(project); + writeFileSync(resolve(project, native), 'user-owned configuration'); + symlinkSync( + resolve(fixture.temporary, 'absent-binding'), + resolve(project, 'sunhat.toml'), + 'file', + ); + const before = readdirSync(project); + const result = run(fixture, ['--framework', framework, '--adopt', project]); + assert.equal(result.status, 2, result.stderr); + assert.match(result.stderr, /already bound by sunhat.toml/u); + assert.deepEqual(readdirSync(project), before); + assert.equal( + readFileSync(resolve(project, native), 'utf8'), + 'user-owned configuration', + ); + }); + + test(`${framework} adoption accepts a native configuration file symlink`, (t) => { + const fixture = runtime(t); + const project = resolve(fixture.temporary, 'linked-project'); + mkdirSync(project); + const original = resolve(fixture.temporary, 'native-config'); + writeFileSync(original, 'user-owned configuration'); + symlinkSync(original, resolve(project, native), 'file'); + if (framework === 'hardhat') { + // Invalid earlier candidates must not hide a valid TypeScript config. + mkdirSync(resolve(project, 'hardhat.config.js')); + } + const result = run(fixture, [ + '--framework', + framework, + '--target', + 'evm', + '--adopt', + project, + ]); + assert.equal(result.status, 0, result.stderr); + assert.equal(readFileSync(original, 'utf8'), 'user-owned configuration'); + assert.match( + readFileSync(resolve(project, 'sunhat.toml'), 'utf8'), + /target = "evm"/u, + ); + assert.equal(existsSync(resolve(project, 'package.json')), false); + }); +} From c4a746bf68d02fe5562ce6ef4b669689a2992f51 Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Tue, 27 Oct 2026 23:27:31 +0800 Subject: [PATCH 16/24] test: isolate CLI fixtures and bound child process execution --- test/cli.test.js | 27 ++++++++++++++++++++++----- test/fixtures/foundry-init.js | 18 ++++++++++++------ test/json-boundaries.test.js | 15 +++++++++++++-- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/test/cli.test.js b/test/cli.test.js index a2dfa4a..8430431 100644 --- a/test/cli.test.js +++ b/test/cli.test.js @@ -4,29 +4,43 @@ import { mkdirSync, mkdtempSync, readFileSync, + rmSync, writeFileSync, } from 'node:fs'; import { tmpdir } from 'node:os'; import { dirname, resolve } from 'node:path'; import { spawnSync } from 'node:child_process'; -import test from 'node:test'; +import { fileURLToPath } from 'node:url'; +import test, { after } from 'node:test'; import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; -const cli = resolve('bin/sunhat.js'); +const cli = fileURLToPath(new URL('../bin/sunhat.js', import.meta.url)); +const repository = resolve(dirname(cli), '..'); +const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-cli-')); +after(() => rmSync(temporary, { recursive: true, force: true })); + function temp(name) { - return mkdtempSync(resolve(tmpdir(), `sunhat-${name}-`)); + return mkdtempSync(resolve(temporary, `${name}-`)); } + function run(cwd, args) { return spawnSync( process.execPath, [...(args[0] === 'init' ? foundryInitArgs : []), cli, ...args], - { cwd, encoding: 'utf8', env: { ...process.env, ...foundryInitEnv } }, + { + cwd, + encoding: 'utf8', + timeout: 10_000, + env: { ...process.env, ...foundryInitEnv }, + }, ); } + function json(path, value) { mkdirSync(dirname(path), { recursive: true }); writeFileSync(path, `${JSON.stringify(value)}\n`); } + function binding(root, framework, target) { writeFileSync( resolve(root, 'sunhat.toml'), @@ -37,11 +51,13 @@ function binding(root, framework, target) { devDependencies: framework === 'hardhat' ? { hardhat: '2.22.0' } : {}, }); } + function executable(path, body) { mkdirSync(dirname(path), { recursive: true }); writeFileSync(path, `#!/usr/bin/env node\n${body}\n`); chmodSync(path, 0o755); } + function hardhat(root, version = '2.22.0') { const base = resolve(root, 'node_modules/hardhat'); json(resolve(base, 'package.json'), { @@ -54,6 +70,7 @@ function hardhat(root, version = '2.22.0') { `process.stdout.write(JSON.stringify(process.argv.slice(2))); process.exitCode = 17;`, ); } + function foundry(root, target) { const base = resolve(root, `.sunhat/toolchains/${target}`); const binaries = {}; @@ -149,7 +166,7 @@ test('Hardhat scaffold requires explicit framework and refuses overwrite', () => ); const pkg = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8')); assert.doesNotMatch(JSON.stringify(pkg), /hardhat-tron/u); - assert.equal(pkg.devDependencies.sunhat, `file:${process.cwd()}`); + assert.equal(pkg.devDependencies.sunhat, `file:${repository}`); assert.equal(pkg.scripts.build, 'sunhat compile'); const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); assert.match(readme, /Hardhat EVM Project with Sunhat/u); diff --git a/test/fixtures/foundry-init.js b/test/fixtures/foundry-init.js index 28651a5..c80f0c0 100644 --- a/test/fixtures/foundry-init.js +++ b/test/fixtures/foundry-init.js @@ -23,13 +23,19 @@ for (const tool of ['forge', 'cast', 'anvil', 'chisel']) { } if (windows) { const literal = (value) => `'${value.replaceAll("'", "''")}'`; - execFileSync('powershell.exe', [ - '-NoProfile', - '-Command', - `$ErrorActionPreference = 'Stop'; Compress-Archive -LiteralPath @(${files.map((name) => literal(resolve(source, name))).join(', ')}) -DestinationPath ${literal(archive)}`, - ]); + execFileSync( + 'powershell.exe', + [ + '-NoProfile', + '-Command', + `$ErrorActionPreference = 'Stop'; Compress-Archive -LiteralPath @(${files.map((name) => literal(resolve(source, name))).join(', ')}) -DestinationPath ${literal(archive)}`, + ], + { timeout: 30_000 }, + ); } else { - execFileSync('tar', ['-czf', archive, '-C', source, ...files]); + execFileSync('tar', ['-czf', archive, '-C', source, ...files], { + timeout: 30_000, + }); } export const foundryInitArgs = [ diff --git a/test/json-boundaries.test.js b/test/json-boundaries.test.js index 8230789..085e24e 100644 --- a/test/json-boundaries.test.js +++ b/test/json-boundaries.test.js @@ -10,10 +10,12 @@ import { } from 'node:fs'; import { tmpdir } from 'node:os'; import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; import test from 'node:test'; import { platformKey, releaseFor } from '../dist/toolchain/releases.js'; -const cli = resolve('bin/sunhat.js'); +const cli = fileURLToPath(new URL('../bin/sunhat.js', import.meta.url)); + function fixture(t, framework) { const root = realpathSync(mkdtempSync(resolve(tmpdir(), 'sunhat-json-'))); t.after(() => rmSync(root, { recursive: true, force: true })); @@ -23,10 +25,12 @@ function fixture(t, framework) { ); return root; } + function json(path, value) { mkdirSync(dirname(path), { recursive: true }); writeFileSync(path, JSON.stringify(value)); } + function run(root, args) { return spawnSync(process.execPath, [cli, ...args], { cwd: root, @@ -34,6 +38,7 @@ function run(root, args) { timeout: 10_000, }); } + function assertInvalid(result, path) { assert.equal(result.status, 3, result.stderr); assert.ok(result.stderr.includes(path), result.stderr); @@ -43,6 +48,7 @@ function assertInvalid(result, path) { ); assert.equal(result.stdout, ''); } + function lock() { return { version: 2, @@ -198,7 +204,12 @@ for (const [name, modify] of [ test(`release configuration rejects ${name} with its path`, (t) => { const root = fixture(t, 'foundry'); const value = JSON.parse( - readFileSync(resolve('templates/foundry/evm/foundry-toolchain.json')), + readFileSync( + new URL( + '../templates/foundry/evm/foundry-toolchain.json', + import.meta.url, + ), + ), ); modify(value); const path = resolve(root, 'foundry-toolchain.json'); From 1f1ffa598b7e8faae24f57a675153ebe898000da Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Wed, 28 Oct 2026 14:18:23 +0800 Subject: [PATCH 17/24] fix: generate portable Sunhat dependencies from package metadata --- docs/QuickStart.md | 17 +++++++++--- src/cli/router.ts | 3 ++- src/commands/init.ts | 28 +++++++++++++------ src/package.ts | 38 ++++++++++++++++++++++++++ src/toolchain/releases.ts | 6 ++--- templates/foundry/evm/README.md | 10 +++---- templates/foundry/tron/README.md | 10 +++---- templates/hardhat/evm/README.md | 10 +++---- templates/hardhat/tron/README.md | 10 +++---- test/cli.test.js | 8 +++++- test/init-template-assets.test.js | 45 ++++++++++++++++++++++++++++++- 11 files changed, 147 insertions(+), 38 deletions(-) create mode 100644 src/package.ts diff --git a/docs/QuickStart.md b/docs/QuickStart.md index 6638bde..85dc3eb 100644 --- a/docs/QuickStart.md +++ b/docs/QuickStart.md @@ -57,13 +57,13 @@ For EVM, initialize with `--target evm` and use the same install, compile, and t ## Use the local CLI and npm scripts -Generated projects initially reference the Sunhat installation that created them through a `file:` dependency named `sunhat`. For a portable registry dependency, replace that reference from the generated project's root: +Generated projects declare the creating CLI's npm package and exact version under the `sunhat` alias. Install the generated project's dependencies from its root: ```bash -npm install --save-dev --save-exact sunhat@npm:@sun-protocol/sunhat@2.0.0 +npm install ``` -This npm alias keeps the generated dependency name `sunhat` while installing the scoped package. Commit `package.json` and the package-manager lockfile for reproducible npm dependency installation. +For Sunhat 2.0.0, the alias is `npm:@sun-protocol/sunhat@2.0.0`. It is independent of the initializing machine's installation path. Commit `package.json` and the package-manager lockfile for reproducible npm dependency installation. ```bash npx --no-install sunhat --version @@ -75,6 +75,17 @@ The generated `build` script runs `sunhat build` for Foundry or `sunhat compile` Global Sunhat resolves the project's framework tools, but it does not switch to the project's Sunhat version. Use `npx --no-install sunhat ...` or the generated npm scripts when you want the local CLI. +### Develop against a local checkout + +Run `npm run build` in the Sunhat checkout. In a generated project's root, explicitly point its Sunhat dependency at that checkout: + +```bash +npm pkg set "devDependencies.sunhat=file:/absolute/path/to/sunhat2" +npm install +``` + +Rebuild the checkout after source changes. Restore the registry dependency before sharing the project or committing its dependency configuration. + ## Adopt an existing project Run the appropriate command from a directory containing `foundry.toml` or `hardhat.config.js`, `.cjs`, or `.ts`: diff --git a/src/cli/router.ts b/src/cli/router.ts index d2de746..a5c1f85 100644 --- a/src/cli/router.ts +++ b/src/cli/router.ts @@ -4,6 +4,7 @@ import { runFoundry } from '../adapters/foundry.js'; import { initProject } from '../commands/init.js'; import { toolchain } from '../commands/toolchain.js'; import { usage } from '../errors.js'; +import { readPackageMetadata } from '../package.js'; import { readBinding } from '../project/binding.js'; import { findProjectRoot } from '../project/root.js'; import type { Invocation } from './parser.js'; @@ -23,7 +24,7 @@ export async function route(invocation: Invocation): Promise { return 0; } if (invocation.kind === 'version') { - process.stdout.write('sunhat 2.0.0\n'); + process.stdout.write(`sunhat ${readPackageMetadata().version}\n`); return 0; } if (invocation.kind === 'init') { diff --git a/src/commands/init.ts b/src/commands/init.ts index f6b5cc8..5f421af 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -8,9 +8,9 @@ import { writeFileSync, } from 'node:fs'; import { basename, dirname, join, resolve } from 'node:path'; -import { fileURLToPath } from 'node:url'; import { parseArgs } from 'node:util'; import { CliError, errorMessage, hasErrorCode, usage } from '../errors.js'; +import { packageRoot, readPackageMetadata } from '../package.js'; import type { Framework, Target } from '../project/binding.js'; import { parseTarget } from '../cli/parser.js'; import { installFoundry } from '../toolchain/install.js'; @@ -22,7 +22,11 @@ interface InitOptions { adopt: boolean; } -const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); +interface TemplateValues { + projectName: string; + sunhatPackage: string; + sunhatDependency: string; +} export async function initProject(argv: readonly string[]): Promise { const options = parseOptions(argv); @@ -134,13 +138,20 @@ function validateNativeProject(root: string, framework: Framework): void { } function scaffold(root: string, framework: Framework, target: Target): void { + const metadata = readPackageMetadata(); + const sunhatPackage = `${metadata.name}@${metadata.version}`; + const values: TemplateValues = { + projectName: basename(root), + sunhatPackage, + sunhatDependency: `npm:${sunhatPackage}`, + }; const source = resolve(packageRoot, 'templates', framework); const files = new Map(); collectTemplates(resolve(source, 'common'), '', files); collectTemplates(resolve(source, target), '', files); const outputs = Array.from(files, ([name, from]) => ({ path: resolve(root, name), - data: renderTemplate(from, root), + data: renderTemplate(from, values), })); const checked = new Set(); for (const file of outputs) { @@ -206,15 +217,16 @@ function collectTemplates( } } -function renderTemplate(path: string, root: string): string | Buffer { +function renderTemplate(path: string, values: TemplateValues): string | Buffer { const contents = readFileSync(path); + if (path.endsWith('.md')) { + return contents + .toString('utf8') + .replaceAll('{{sunhatPackage}}', values.sunhatPackage); + } if (!path.endsWith('.json')) { return contents; } - const values = { - projectName: basename(root), - sunhatDependency: `file:${packageRoot}`, - }; // Replace complete JSON string values so Windows paths and quotes remain escaped. return contents .toString('utf8') diff --git a/src/package.ts b/src/package.ts new file mode 100644 index 0000000..6f98a6b --- /dev/null +++ b/src/package.ts @@ -0,0 +1,38 @@ +import { readFileSync } from 'node:fs'; +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { CliError, errorMessage } from './errors.js'; +import { isRecord } from './project/json.js'; + +export const packageRoot = resolve( + dirname(fileURLToPath(import.meta.url)), + '..', +); + +interface PackageMetadata { + name: string; + version: string; +} + +export function readPackageMetadata(): PackageMetadata { + const path = resolve(packageRoot, 'package.json'); + try { + const value: unknown = JSON.parse(readFileSync(path, 'utf8')); + if ( + !isRecord(value) || + typeof value.name !== 'string' || + value.name.length === 0 || + typeof value.version !== 'string' || + value.version.length === 0 + ) { + throw new Error('expected non-empty package name and version strings'); + } + return { name: value.name, version: value.version }; + } catch (error) { + throw new CliError( + `cannot read Sunhat package metadata ${path}: ${errorMessage(error)}`, + 6, + { cause: error }, + ); + } +} diff --git a/src/toolchain/releases.ts b/src/toolchain/releases.ts index 2b57ca3..78d201e 100644 --- a/src/toolchain/releases.ts +++ b/src/toolchain/releases.ts @@ -1,8 +1,8 @@ import { existsSync } from 'node:fs'; -import { basename, dirname, resolve } from 'node:path'; -import { fileURLToPath } from 'node:url'; +import { basename, resolve } from 'node:path'; import type { Target } from '../project/binding.js'; import { toolchainError } from '../errors.js'; +import { packageRoot } from '../package.js'; import { isRecord, readJson } from '../project/json.js'; import type { FoundryTool } from './lock.js'; @@ -15,8 +15,6 @@ export interface Release { tools: Record; } -const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); - export function platformKey(): string { return `${process.platform}-${process.arch === 'x64' ? 'amd64' : process.arch}`; } diff --git a/templates/foundry/evm/README.md b/templates/foundry/evm/README.md index 0ce4195..89ca9ec 100644 --- a/templates/foundry/evm/README.md +++ b/templates/foundry/evm/README.md @@ -4,26 +4,26 @@ This project uses Sunhat to select and run a project-local Foundry toolchain for ## Global command prerequisites -The `sunhat ...` examples use the `@sun-protocol/sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: +The `sunhat ...` examples use the `{{sunhatPackage}}` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: ```bash -npm install --global @sun-protocol/sunhat@2.0.0 +npm install --global {{sunhatPackage}} sunhat --version ``` Run project commands from this directory or a subdirectory. `sunhat init` has already installed the Foundry toolchain. Global Sunhat uses the binaries in this project's `.sunhat/` directory. -The quick start also installs `@sun-protocol/sunhat@2.0.0` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. +The generated project declares `{{sunhatPackage}}` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. ## Quick start ```bash -npm install --save-dev --save-exact sunhat@npm:@sun-protocol/sunhat@2.0.0 +npm install npm run build npm test ``` -The install command replaces the scaffold's `file:` Sunhat reference with the npm version and installs the project's other declared dependencies. +The install command installs all declared dependencies. The Sunhat dependency uses an npm alias that is independent of the machine that initialized this project. `sunhat init` installs and verifies the release declared in `foundry-toolchain.json` and stores the binaries under `.sunhat/toolchains/`. Subsequent commands run the installed executables without rehashing them or probing their versions. If initialization reported an installation failure, retry with `sunhat toolchain install`. Use `toolchain info` to inspect installed metadata. diff --git a/templates/foundry/tron/README.md b/templates/foundry/tron/README.md index cc6cbed..5e566f6 100644 --- a/templates/foundry/tron/README.md +++ b/templates/foundry/tron/README.md @@ -4,26 +4,26 @@ This project uses Sunhat to select and run a project-local Foundry-TRON toolchai ## Global command prerequisites -The `sunhat ...` examples use the `@sun-protocol/sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: +The `sunhat ...` examples use the `{{sunhatPackage}}` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: ```bash -npm install --global @sun-protocol/sunhat@2.0.0 +npm install --global {{sunhatPackage}} sunhat --version ``` Run project commands from this directory or a subdirectory. `sunhat init` has already installed the Foundry-TRON toolchain. Global Sunhat uses the binaries in this project's `.sunhat/` directory. Anvil and Chisel are unavailable for TRON. -The quick start also installs `@sun-protocol/sunhat@2.0.0` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. +The generated project declares `{{sunhatPackage}}` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. ## Quick start ```bash -npm install --save-dev --save-exact sunhat@npm:@sun-protocol/sunhat@2.0.0 +npm install npm run build npm test ``` -The install command replaces the scaffold's `file:` Sunhat reference with the npm version and installs the project's other declared dependencies. +The install command installs all declared dependencies. The Sunhat dependency uses an npm alias that is independent of the machine that initialized this project. `sunhat init` installs and verifies the release declared in `foundry-toolchain.json` and stores the binaries under `.sunhat/toolchains/`. Subsequent commands run the installed executables without rehashing them or probing their versions. If initialization reported an installation failure, retry with `sunhat toolchain install`. Use `toolchain info` to inspect installed metadata. diff --git a/templates/hardhat/evm/README.md b/templates/hardhat/evm/README.md index 1d7827c..53369b8 100644 --- a/templates/hardhat/evm/README.md +++ b/templates/hardhat/evm/README.md @@ -4,26 +4,26 @@ This project uses Sunhat to run the locally installed Hardhat 2 toolchain for an ## Global command prerequisites -The `sunhat ...` examples use the `@sun-protocol/sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: +The `sunhat ...` examples use the `{{sunhatPackage}}` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: ```bash -npm install --global @sun-protocol/sunhat@2.0.0 +npm install --global {{sunhatPackage}} sunhat --version ``` Run project commands from this directory or a subdirectory after the dependency installation below. Global Sunhat uses the project's local Hardhat 2 dependency and configuration. -The quick start also installs `@sun-protocol/sunhat@2.0.0` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. +The generated project declares `{{sunhatPackage}}` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. ## Quick start ```bash -npm install --save-dev --save-exact sunhat@npm:@sun-protocol/sunhat@2.0.0 +npm install npm run build npm test ``` -The install command replaces the scaffold's `file:` Sunhat reference with the npm version and installs the project's other declared dependencies. +The install command installs all declared dependencies. The Sunhat dependency uses an npm alias that is independent of the machine that initialized this project. ## Commands diff --git a/templates/hardhat/tron/README.md b/templates/hardhat/tron/README.md index c99d183..c44b97c 100644 --- a/templates/hardhat/tron/README.md +++ b/templates/hardhat/tron/README.md @@ -4,28 +4,28 @@ This project uses Sunhat to run Hardhat 2 with the Hardhat-TRON plugin and a TRE ## Global command prerequisites -The `sunhat ...` examples use the `@sun-protocol/sunhat@2.0.0` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: +The `sunhat ...` examples use the `{{sunhatPackage}}` npm package. Use Node.js `>=20.11` and ensure npm's global executable directory is on `PATH`. Install and verify the global CLI with: ```bash -npm install --global @sun-protocol/sunhat@2.0.0 +npm install --global {{sunhatPackage}} sunhat --version ``` Run project commands from this directory or a subdirectory after the dependency installation below. Global Sunhat uses the project's local Hardhat 2 and Hardhat-TRON dependencies and configuration. -The quick start also installs `@sun-protocol/sunhat@2.0.0` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. +The generated project declares `{{sunhatPackage}}` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. Docker must be installed and running. The generated configuration starts `tronbox/tre:dev` automatically when required. ## Quick start ```bash -npm install --save-dev --save-exact sunhat@npm:@sun-protocol/sunhat@2.0.0 +npm install npm run build npm test ``` -The install command replaces the scaffold's `file:` Sunhat reference with the npm version and installs the project's other declared dependencies. +The install command installs all declared dependencies. The Sunhat dependency uses an npm alias that is independent of the machine that initialized this project. The generated configuration selects the `tre` network and compiles contracts with `tron-solc`. diff --git a/test/cli.test.js b/test/cli.test.js index 8430431..cf3d063 100644 --- a/test/cli.test.js +++ b/test/cli.test.js @@ -16,6 +16,9 @@ import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; const cli = fileURLToPath(new URL('../bin/sunhat.js', import.meta.url)); const repository = resolve(dirname(cli), '..'); +const packageMetadata = JSON.parse( + readFileSync(resolve(repository, 'package.json'), 'utf8'), +); const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-cli-')); after(() => rmSync(temporary, { recursive: true, force: true })); @@ -166,7 +169,10 @@ test('Hardhat scaffold requires explicit framework and refuses overwrite', () => ); const pkg = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8')); assert.doesNotMatch(JSON.stringify(pkg), /hardhat-tron/u); - assert.equal(pkg.devDependencies.sunhat, `file:${repository}`); + assert.equal( + pkg.devDependencies.sunhat, + `npm:${packageMetadata.name}@${packageMetadata.version}`, + ); assert.equal(pkg.scripts.build, 'sunhat compile'); const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); assert.match(readme, /Hardhat EVM Project with Sunhat/u); diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js index 8b7a400..595d3b9 100644 --- a/test/init-template-assets.test.js +++ b/test/init-template-assets.test.js @@ -22,6 +22,9 @@ import { initProject } from '../dist/commands/init.js'; import { CliError } from '../dist/errors.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); +const packageMetadata = JSON.parse( + readFileSync(resolve(repository, 'package.json'), 'utf8'), +); function runtime(t) { const temporary = realpathSync( @@ -137,7 +140,7 @@ for (const framework of ['hardhat', 'foundry']) { assert.equal(generated.name, basename(project)); assert.equal( generated.devDependencies.sunhat, - `file:${fixture.packageRoot}`, + `npm:${packageMetadata.name}@${packageMetadata.version}`, ); assert.equal(generated.devDependencies['@types/node'], '22.10.2'); assert.equal(generated.scripts.typecheck, 'tsc --noEmit'); @@ -176,6 +179,46 @@ for (const framework of ['hardhat', 'foundry']) { } } +test('package metadata drives the version command and every generated Sunhat dependency', (t) => { + const fixture = runtime(t); + const path = resolve(fixture.packageRoot, 'package.json'); + const metadata = JSON.parse(readFileSync(path, 'utf8')); + metadata.name = '@sun-protocol/sunhat-preview'; + metadata.version = '2.1.0-rc.1'; + json(path, metadata); + const version = spawnSync(process.execPath, [fixture.cli, '--version'], { + cwd: fixture.temporary, + encoding: 'utf8', + timeout: 10_000, + }); + assert.equal(version.status, 0, version.stderr); + assert.equal(version.stdout, `sunhat ${metadata.version}\n`); + + for (const framework of ['hardhat', 'foundry']) { + for (const target of ['evm', 'tron']) { + const project = resolve(fixture.temporary, `${framework}-${target}`); + const result = run(fixture, [ + '--framework', + framework, + '--target', + target, + project, + ]); + assert.equal(result.status, 0, result.stderr); + const generated = JSON.parse( + readFileSync(resolve(project, 'package.json'), 'utf8'), + ); + assert.equal( + generated.devDependencies.sunhat, + `npm:${metadata.name}@${metadata.version}`, + ); + const readme = readFileSync(resolve(project, 'README.md'), 'utf8'); + assert.ok(readme.includes(`${metadata.name}@${metadata.version}`)); + assert.doesNotMatch(readme, /\{\{sunhatPackage\}\}/u); + } + } +}); + test('new template files participate in conflict checks before any project file is written', (t) => { const fixture = runtime(t); json( From 70a2365f9dda15a0bb5534efde9b70f92a0ce72e Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Wed, 28 Oct 2026 14:22:00 +0800 Subject: [PATCH 18/24] build: verify packed CLI through an isolated installation --- .github/workflows/ci.yml | 1 + README.md | 6 +- package.json | 3 +- test/package.test.js | 223 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 231 insertions(+), 2 deletions(-) create mode 100644 test/package.test.js diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index deb470a..7d9d35b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,3 +50,4 @@ jobs: - run: npm ci - run: npm run build - run: node --test test/toolchain.test.js test/process.test.js + - run: npm run pack:check diff --git a/README.md b/README.md index 3c338c2..6fcbc93 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,11 @@ npm run format:check npm test ``` -`npm run test:templates` installs fresh Hardhat EVM/TRON projects and runs `tsc --noEmit`. `npm run pack:check` checks package contents. Runtime tests use framework and download fixtures. +`npm run test:templates` generates Hardhat EVM/TRON projects, installs their dependencies, and runs `tsc --noEmit`. + +`npm run pack:check` starts without build artifacts, installs the actual tarball in an isolated project, and exercises the installed CLI and all four templates. This check requires npm registry access; Foundry release downloads use local fixtures. + +`prepack` builds the CLI for both `npm pack` and `npm publish`. Source builds reject unused declarations, incomplete return paths, and switch fallthrough. ESLint uses type information for `src/` to catch unhandled promises, async callbacks in synchronous APIs, and unsafe type assertions. Template linting does not require installing each generated project's dependencies. diff --git a/package.json b/package.json index 27387f8..bf9f465 100644 --- a/package.json +++ b/package.json @@ -25,10 +25,11 @@ "format:check": "prettier . --check", "build": "npm run clean && tsc -p tsconfig.json", "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"", + "prepack": "npm run build", "test": "npm run build && npm run test:runtime", "test:runtime": "node --test test/toml.test.js test/binding.test.js test/json-boundaries.test.js test/process.test.js test/cli.test.js test/init-commands.test.js test/init-template-assets.test.js test/toolchain.test.js", "test:templates": "npm run build && node --test test/template-types.test.js", - "pack:check": "npm run build && npm pack --dry-run" + "pack:check": "npm run clean && node --test test/package.test.js" }, "devDependencies": { "@eslint/js": "10.0.1", diff --git a/test/package.test.js b/test/package.test.js new file mode 100644 index 0000000..dce6b1c --- /dev/null +++ b/test/package.test.js @@ -0,0 +1,223 @@ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import { + existsSync, + lstatSync, + mkdirSync, + mkdtempSync, + readFileSync, + readdirSync, + realpathSync, + rmSync, + writeFileSync, +} from 'node:fs'; +import { tmpdir } from 'node:os'; +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import test from 'node:test'; +import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; + +const repository = fileURLToPath(new URL('../', import.meta.url)); +const metadata = JSON.parse( + readFileSync(resolve(repository, 'package.json'), 'utf8'), +); + +function run(args, cwd, { env = {}, timeout = 30_000 } = {}) { + const result = spawnSync(process.execPath, args, { + cwd, + env: { ...process.env, ...env }, + encoding: 'utf8', + timeout, + maxBuffer: 4 * 1024 * 1024, + }); + assert.equal( + result.status, + 0, + [args.join(' '), result.error?.message, result.stdout, result.stderr] + .filter(Boolean) + .join('\n'), + ); + return result; +} + +test( + 'the packed CLI works outside the repository and initializes all project variants', + { timeout: 180_000 }, + async (t) => { + const npm = process.env.npm_execpath; + assert.ok(npm, 'Run this integration suite with npm run pack:check'); + assert.equal( + existsSync(resolve(repository, 'dist')), + false, + 'pack:check must start without build artifacts', + ); + const temporary = realpathSync( + mkdtempSync(resolve(tmpdir(), 'sunhat-package-')), + ); + t.after(() => rmSync(temporary, { recursive: true, force: true })); + const archives = resolve(temporary, 'archives'); + mkdirSync(archives); + run([npm, 'pack', '--pack-destination', archives], repository, { + timeout: 90_000, + }); + const tarballs = readdirSync(archives).filter((name) => + name.endsWith('.tgz'), + ); + assert.equal(tarballs.length, 1); + + const consumer = resolve(temporary, 'consumer with spaces'); + mkdirSync(consumer); + writeFileSync( + resolve(consumer, 'package.json'), + JSON.stringify({ name: 'sunhat-package-consumer', private: true }), + ); + run( + [ + npm, + 'install', + '--ignore-scripts', + '--no-audit', + '--no-fund', + '--package-lock=false', + resolve(archives, tarballs[0]), + ], + consumer, + { timeout: 90_000 }, + ); + const installed = resolve(consumer, 'node_modules', metadata.name); + assert.equal(lstatSync(installed).isSymbolicLink(), false); + const cli = resolve(installed, 'bin/sunhat.js'); + + await t.test( + 'the artifact contains runtime files, templates and documentation', + () => { + for (const path of [ + 'dist/bin/sunhat.js', + 'dist/package.js', + 'templates', + 'README.md', + 'docs/QuickStart.md', + 'docs/toml-binding.md', + ]) { + assert.ok(existsSync(resolve(installed, path)), `missing ${path}`); + } + for (const path of ['src', 'test', '.github']) { + assert.equal( + existsSync(resolve(installed, path)), + false, + `unexpected ${path}`, + ); + } + }, + ); + + await t.test( + 'npm installs a working CLI executable with the package version', + () => { + assert.ok( + existsSync( + resolve( + consumer, + 'node_modules/.bin', + process.platform === 'win32' ? 'sunhat.cmd' : 'sunhat', + ), + ), + ); + const version = run( + [npm, 'exec', '--offline', '--no', '--', 'sunhat', '--version'], + consumer, + ); + assert.equal(version.stdout, `sunhat ${metadata.version}\n`); + }, + ); + + await t.test( + 'the installed CLI shows help without a project binding', + () => { + const help = run([cli, '--help'], consumer); + assert.match(help.stdout, /sunhat /u); + }, + ); + + for (const framework of ['foundry', 'hardhat']) { + for (const target of ['evm', 'tron']) { + await t.test( + `${framework}/${target} initializes from the installed templates`, + () => { + const project = resolve(consumer, `${framework}-${target}`); + run( + [ + ...(framework === 'foundry' ? foundryInitArgs : []), + cli, + 'init', + '--framework', + framework, + '--target', + target, + project, + ], + consumer, + { + env: { ...foundryInitEnv, SUNHAT_TEST_PACKAGE_ROOT: installed }, + }, + ); + const manifest = JSON.parse( + readFileSync(resolve(project, 'package.json'), 'utf8'), + ); + assert.equal( + manifest.devDependencies.sunhat, + `npm:${metadata.name}@${metadata.version}`, + ); + const binding = readFileSync( + resolve(project, 'sunhat.toml'), + 'utf8', + ); + assert.equal( + binding, + `[project]\nframework = "${framework}"\ntarget = "${target}"\n`, + ); + const readme = readFileSync(resolve(project, 'README.md'), 'utf8'); + assert.ok(readme.includes(`${metadata.name}@${metadata.version}`)); + assert.doesNotMatch(readme, /\{\{sunhatPackage\}\}/u); + const paths = + framework === 'foundry' + ? [ + 'foundry.toml', + 'src/Counter.sol', + 'test/Counter.t.sol', + 'script/Counter.s.sol', + ] + : [ + 'hardhat.config.ts', + 'tsconfig.json', + 'contracts/Counter.sol', + 'test/Counter.test.ts', + 'scripts/deploy.ts', + ]; + for (const path of paths) { + assert.ok(existsSync(resolve(project, path)), `missing ${path}`); + } + if (framework === 'foundry') { + const lock = JSON.parse( + readFileSync( + resolve(project, '.sunhat/toolchain.json'), + 'utf8', + ), + ); + assert.equal(lock.target, target); + assert.deepEqual(Object.keys(lock.binaries).sort(), [ + 'anvil', + 'cast', + 'chisel', + 'forge', + ]); + for (const binary of Object.values(lock.binaries)) { + assert.ok(existsSync(resolve(project, binary.path))); + } + } + }, + ); + } + } + }, +); From 133856199880a5342acbf004df52b6bac5d9414e Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Wed, 28 Oct 2026 14:34:40 +0800 Subject: [PATCH 19/24] refactor: separate initialization planning from file writes --- src/cli/init-options.ts | 50 +++++++ src/commands/init.ts | 240 ++---------------------------- src/scaffold/apply.ts | 67 +++++++++ src/scaffold/plan.ts | 146 ++++++++++++++++++ test/init-template-assets.test.js | 69 ++++++++- 5 files changed, 341 insertions(+), 231 deletions(-) create mode 100644 src/cli/init-options.ts create mode 100644 src/scaffold/apply.ts create mode 100644 src/scaffold/plan.ts diff --git a/src/cli/init-options.ts b/src/cli/init-options.ts new file mode 100644 index 0000000..3f4c590 --- /dev/null +++ b/src/cli/init-options.ts @@ -0,0 +1,50 @@ +import { parseArgs } from 'node:util'; +import { CliError, errorMessage, usage } from '../errors.js'; +import type { Framework, Target } from '../project/binding.js'; +import { parseTarget } from './parser.js'; + +export interface InitOptions { + framework: Framework; + target: Target; + path: string; + adopt: boolean; +} + +export function parseInitOptions( + argv: readonly string[], +): InitOptions | undefined { + try { + const { values, positionals } = parseArgs({ + args: [...argv], + options: { + framework: { type: 'string', default: 'foundry' }, + target: { type: 'string', default: 'tron' }, + adopt: { type: 'boolean', default: false }, + help: { type: 'boolean', short: 'h' }, + }, + allowPositionals: true, + strict: true, + }); + if (values.help) { + return undefined; + } + if (positionals.length > 1) { + return usage('init accepts at most one path'); + } + const framework = values.framework; + if (framework !== 'foundry' && framework !== 'hardhat') { + return usage('--framework requires foundry or hardhat'); + } + return { + framework, + target: parseTarget(values.target), + path: positionals[0] ?? '.', + adopt: values.adopt, + }; + } catch (error) { + if (error instanceof CliError) { + throw error; + } + return usage(errorMessage(error), { cause: error }); + } +} diff --git a/src/commands/init.ts b/src/commands/init.ts index 5f421af..c7cd621 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -1,35 +1,12 @@ -import { - existsSync, - lstatSync, - mkdirSync, - readdirSync, - readFileSync, - statSync, - writeFileSync, -} from 'node:fs'; -import { basename, dirname, join, resolve } from 'node:path'; -import { parseArgs } from 'node:util'; -import { CliError, errorMessage, hasErrorCode, usage } from '../errors.js'; -import { packageRoot, readPackageMetadata } from '../package.js'; -import type { Framework, Target } from '../project/binding.js'; -import { parseTarget } from '../cli/parser.js'; +import { resolve } from 'node:path'; +import { parseInitOptions } from '../cli/init-options.js'; +import { CliError, errorMessage } from '../errors.js'; +import { applyScaffold } from '../scaffold/apply.js'; +import { planAdoption, planScaffold } from '../scaffold/plan.js'; import { installFoundry } from '../toolchain/install.js'; -interface InitOptions { - framework: Framework; - target: Target; - path: string; - adopt: boolean; -} - -interface TemplateValues { - projectName: string; - sunhatPackage: string; - sunhatDependency: string; -} - export async function initProject(argv: readonly string[]): Promise { - const options = parseOptions(argv); + const options = parseInitOptions(argv); if (!options) { process.stdout.write( 'Usage: sunhat init [--framework ] [--target ] [--adopt] [path]\nDefaults: framework=foundry, target=tron\n', @@ -38,27 +15,10 @@ export async function initProject(argv: readonly string[]): Promise { } const { framework, target } = options; const root = resolve(options.path); - if (options.adopt) { - validateNativeProject(root, framework); - } else { - mkdirSync(root, { recursive: true }); - } - if (lstatSync(resolve(root, 'sunhat.toml'), { throwIfNoEntry: false })) { - return usage(`${root} is already bound by sunhat.toml`); - } - const template = resolve(packageRoot, 'templates', framework, target); - if (options.adopt) { - const configuration = resolve(root, 'foundry-toolchain.json'); - if (framework === 'foundry' && !existsSync(configuration)) { - copyExclusive(resolve(template, 'foundry-toolchain.json'), configuration); - } - copyExclusive( - resolve(template, 'sunhat.toml'), - resolve(root, 'sunhat.toml'), - ); - } else { - scaffold(root, framework, target); - } + const plan = options.adopt + ? planAdoption(root, framework, target) + : planScaffold(root, framework, target); + applyScaffold(plan); if (framework === 'foundry') { try { await installFoundry(root, target); @@ -75,183 +35,3 @@ export async function initProject(argv: readonly string[]): Promise { ); return 0; } - -function parseOptions(argv: readonly string[]): InitOptions | undefined { - try { - const { values, positionals } = parseArgs({ - args: [...argv], - options: { - framework: { type: 'string', default: 'foundry' }, - target: { type: 'string', default: 'tron' }, - adopt: { type: 'boolean', default: false }, - help: { type: 'boolean', short: 'h' }, - }, - allowPositionals: true, - strict: true, - }); - if (values.help) { - return undefined; - } - if (positionals.length > 1) { - return usage('init accepts at most one path'); - } - const framework = values.framework; - if (framework !== 'foundry' && framework !== 'hardhat') { - return usage('--framework requires foundry or hardhat'); - } - return { - framework, - target: parseTarget(values.target), - path: positionals[0] ?? '.', - adopt: values.adopt, - }; - } catch (error) { - if (error instanceof CliError) { - throw error; - } - return usage(errorMessage(error), { cause: error }); - } -} - -function validateNativeProject(root: string, framework: Framework): void { - if (!statSync(root, { throwIfNoEntry: false })?.isDirectory()) { - return usage( - `cannot adopt ${framework}: project directory not found at ${root}`, - ); - } - const found = - framework === 'foundry' - ? statSync(resolve(root, 'foundry.toml'), { - throwIfNoEntry: false, - })?.isFile() - : ['js', 'cjs', 'ts'].some((ext) => - statSync(resolve(root, `hardhat.config.${ext}`), { - throwIfNoEntry: false, - })?.isFile(), - ); - if (!found) { - throw new CliError( - `cannot adopt ${framework}: native configuration not found in ${root}`, - 2, - ); - } -} - -function scaffold(root: string, framework: Framework, target: Target): void { - const metadata = readPackageMetadata(); - const sunhatPackage = `${metadata.name}@${metadata.version}`; - const values: TemplateValues = { - projectName: basename(root), - sunhatPackage, - sunhatDependency: `npm:${sunhatPackage}`, - }; - const source = resolve(packageRoot, 'templates', framework); - const files = new Map(); - collectTemplates(resolve(source, 'common'), '', files); - collectTemplates(resolve(source, target), '', files); - const outputs = Array.from(files, ([name, from]) => ({ - path: resolve(root, name), - data: renderTemplate(from, values), - })); - const checked = new Set(); - for (const file of outputs) { - validateParentDirectories(dirname(file.path), root, checked); - } - const conflict = outputs.find((file) => - lstatSync(file.path, { throwIfNoEntry: false }), - ); - if (conflict) { - throw new CliError( - `refusing to overwrite existing file ${conflict.path}`, - 2, - ); - } - for (const file of outputs) { - writeExclusive(file.path, file.data); - } -} - -function validateParentDirectories( - directory: string, - root: string, - checked: Set, -): void { - const parents: string[] = []; - for (let path = directory; path !== root; path = dirname(path)) { - parents.push(path); - } - for (const path of parents.reverse()) { - if (checked.has(path)) { - continue; - } - const entry = lstatSync(path, { throwIfNoEntry: false }); - if ( - entry && - !entry.isDirectory() && - !( - entry.isSymbolicLink() && - statSync(path, { throwIfNoEntry: false })?.isDirectory() - ) - ) { - throw new CliError(`parent path is not a directory: ${path}`, 2); - } - checked.add(path); - } -} - -function collectTemplates( - directory: string, - relativePath: string, - files: Map, -): void { - for (const entry of readdirSync(directory, { withFileTypes: true })) { - const path = resolve(directory, entry.name); - const name = join(relativePath, entry.name); - if (entry.isDirectory()) { - collectTemplates(path, name, files); - } else if (entry.isFile()) { - files.set(name, path); - } else { - throw new CliError(`unsupported template entry ${path}`, 2); - } - } -} - -function renderTemplate(path: string, values: TemplateValues): string | Buffer { - const contents = readFileSync(path); - if (path.endsWith('.md')) { - return contents - .toString('utf8') - .replaceAll('{{sunhatPackage}}', values.sunhatPackage); - } - if (!path.endsWith('.json')) { - return contents; - } - // Replace complete JSON string values so Windows paths and quotes remain escaped. - return contents - .toString('utf8') - .replace( - /"\{\{(projectName|sunhatDependency)\}\}"/gu, - (_match, key: keyof typeof values) => JSON.stringify(values[key]), - ); -} - -function copyExclusive(from: string, to: string): void { - writeExclusive(to, readFileSync(from)); -} - -function writeExclusive(path: string, data: string | Buffer): void { - mkdirSync(dirname(path), { recursive: true }); - try { - writeFileSync(path, data, { flag: 'wx' }); - } catch (error) { - if (hasErrorCode(error, 'EEXIST')) { - throw new CliError(`refusing to overwrite existing file ${path}`, 2, { - cause: error, - }); - } - throw new CliError(`cannot write file ${path}: ${errorMessage(error)}`, 6, { - cause: error, - }); - } -} diff --git a/src/scaffold/apply.ts b/src/scaffold/apply.ts new file mode 100644 index 0000000..a75e317 --- /dev/null +++ b/src/scaffold/apply.ts @@ -0,0 +1,67 @@ +import { lstatSync, mkdirSync, statSync, writeFileSync } from 'node:fs'; +import { dirname } from 'node:path'; +import { CliError, errorMessage, hasErrorCode } from '../errors.js'; +import type { ScaffoldPlan } from './plan.js'; + +export function applyScaffold(plan: ScaffoldPlan): void { + const checked = new Set(); + for (const file of plan.files) { + validateParentDirectories(dirname(file.path), plan.root, checked); + } + const conflict = plan.files.find((file) => + lstatSync(file.path, { throwIfNoEntry: false }), + ); + if (conflict) { + throw new CliError( + `refusing to overwrite existing file ${conflict.path}`, + 2, + ); + } + for (const file of plan.files) { + writeExclusive(file.path, file.data); + } +} + +function validateParentDirectories( + directory: string, + root: string, + checked: Set, +): void { + const parents: string[] = []; + for (let path = directory; path !== root; path = dirname(path)) { + parents.push(path); + } + for (const path of parents.reverse()) { + if (checked.has(path)) { + continue; + } + const entry = lstatSync(path, { throwIfNoEntry: false }); + if ( + entry && + !entry.isDirectory() && + !( + entry.isSymbolicLink() && + statSync(path, { throwIfNoEntry: false })?.isDirectory() + ) + ) { + throw new CliError(`parent path is not a directory: ${path}`, 2); + } + checked.add(path); + } +} + +function writeExclusive(path: string, data: string | Buffer): void { + mkdirSync(dirname(path), { recursive: true }); + try { + writeFileSync(path, data, { flag: 'wx' }); + } catch (error) { + if (hasErrorCode(error, 'EEXIST')) { + throw new CliError(`refusing to overwrite existing file ${path}`, 2, { + cause: error, + }); + } + throw new CliError(`cannot write file ${path}: ${errorMessage(error)}`, 6, { + cause: error, + }); + } +} diff --git a/src/scaffold/plan.ts b/src/scaffold/plan.ts new file mode 100644 index 0000000..eb95672 --- /dev/null +++ b/src/scaffold/plan.ts @@ -0,0 +1,146 @@ +import { + existsSync, + lstatSync, + readdirSync, + readFileSync, + statSync, +} from 'node:fs'; +import { basename, join, resolve } from 'node:path'; +import { CliError, usage } from '../errors.js'; +import { packageRoot, readPackageMetadata } from '../package.js'; +import type { Framework, Target } from '../project/binding.js'; + +export interface PlannedFile { + readonly path: string; + readonly data: string | Buffer; +} + +export interface ScaffoldPlan { + readonly root: string; + readonly files: readonly PlannedFile[]; +} + +interface TemplateValues { + projectName: string; + sunhatPackage: string; + sunhatDependency: string; +} + +export function planScaffold( + directory: string, + framework: Framework, + target: Target, +): ScaffoldPlan { + const root = resolve(directory); + assertUnbound(root); + const metadata = readPackageMetadata(); + const sunhatPackage = `${metadata.name}@${metadata.version}`; + const values: TemplateValues = { + projectName: basename(root), + sunhatPackage, + sunhatDependency: `npm:${sunhatPackage}`, + }; + const source = resolve(packageRoot, 'templates', framework); + const files = new Map(); + collectTemplates(resolve(source, 'common'), '', files); + collectTemplates(resolve(source, target), '', files); + return { + root, + files: Array.from(files, ([name, from]) => ({ + path: resolve(root, name), + data: renderTemplate(from, values), + })), + }; +} + +export function planAdoption( + directory: string, + framework: Framework, + target: Target, +): ScaffoldPlan { + const root = resolve(directory); + validateNativeProject(root, framework); + assertUnbound(root); + const template = resolve(packageRoot, 'templates', framework, target); + const names = ['sunhat.toml']; + if ( + framework === 'foundry' && + !existsSync(resolve(root, 'foundry-toolchain.json')) + ) { + names.unshift('foundry-toolchain.json'); + } + return { + root, + files: names.map((name) => ({ + path: resolve(root, name), + data: readFileSync(resolve(template, name)), + })), + }; +} + +function assertUnbound(root: string): void { + if (lstatSync(resolve(root, 'sunhat.toml'), { throwIfNoEntry: false })) { + return usage(`${root} is already bound by sunhat.toml`); + } +} + +function validateNativeProject(root: string, framework: Framework): void { + if (!statSync(root, { throwIfNoEntry: false })?.isDirectory()) { + return usage( + `cannot adopt ${framework}: project directory not found at ${root}`, + ); + } + const found = + framework === 'foundry' + ? statSync(resolve(root, 'foundry.toml'), { + throwIfNoEntry: false, + })?.isFile() + : ['js', 'cjs', 'ts'].some((ext) => + statSync(resolve(root, `hardhat.config.${ext}`), { + throwIfNoEntry: false, + })?.isFile(), + ); + if (!found) { + throw new CliError( + `cannot adopt ${framework}: native configuration not found in ${root}`, + 2, + ); + } +} + +function collectTemplates( + directory: string, + relativePath: string, + files: Map, +): void { + for (const entry of readdirSync(directory, { withFileTypes: true })) { + const path = resolve(directory, entry.name); + const name = join(relativePath, entry.name); + if (entry.isDirectory()) { + collectTemplates(path, name, files); + } else if (entry.isFile()) { + files.set(name, path); + } else { + throw new CliError(`unsupported template entry ${path}`, 2); + } + } +} + +function renderTemplate(path: string, values: TemplateValues): string | Buffer { + const contents = readFileSync(path); + if (path.endsWith('.md')) { + return contents + .toString('utf8') + .replaceAll('{{sunhatPackage}}', values.sunhatPackage); + } + if (!path.endsWith('.json')) { + return contents; + } + // Replace complete JSON string values so Windows paths and quotes remain escaped. + return contents + .toString('utf8') + .replace( + /"\{\{(projectName|sunhatDependency)\}\}"/gu, + (_match, key: keyof typeof values) => JSON.stringify(values[key]), + ); +} diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js index 595d3b9..f3c56a5 100644 --- a/test/init-template-assets.test.js +++ b/test/init-template-assets.test.js @@ -14,12 +14,14 @@ import fs, { } from 'node:fs'; import { syncBuiltinESMExports } from 'node:module'; import { tmpdir } from 'node:os'; -import { basename, dirname, resolve } from 'node:path'; +import { basename, dirname, relative, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; import { initProject } from '../dist/commands/init.js'; import { CliError } from '../dist/errors.js'; +import { applyScaffold } from '../dist/scaffold/apply.js'; +import { planAdoption, planScaffold } from '../dist/scaffold/plan.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); const packageMetadata = JSON.parse( @@ -71,6 +73,71 @@ function run(fixture, args) { ); } +test('scaffold plans accept relative paths and can be inspected before creating project directories', (t) => { + const temporary = realpathSync( + mkdtempSync(resolve(tmpdir(), 'sunhat-plan-')), + ); + t.after(() => rmSync(temporary, { recursive: true, force: true })); + for (const framework of ['hardhat', 'foundry']) { + for (const target of ['evm', 'tron']) { + const root = resolve(temporary, `${framework}-${target}`); + const plan = planScaffold( + relative(process.cwd(), root), + framework, + target, + ); + assert.equal(plan.root, root); + assert.equal(existsSync(root), false); + assert.ok( + plan.files.some((file) => file.path === resolve(root, 'package.json')), + ); + applyScaffold(plan); + assert.ok(existsSync(resolve(root, 'sunhat.toml'))); + assert.ok( + existsSync( + resolve( + root, + framework === 'foundry' ? 'foundry.toml' : 'hardhat.config.ts', + ), + ), + ); + } + } +}); + +test('adoption planning preserves the project and checks late conflicts before copying any file', (t) => { + const temporary = realpathSync( + mkdtempSync(resolve(tmpdir(), 'sunhat-adopt-plan-')), + ); + t.after(() => rmSync(temporary, { recursive: true, force: true })); + for (const framework of ['hardhat', 'foundry']) { + const root = resolve(temporary, framework); + mkdirSync(root); + const native = resolve( + root, + framework === 'foundry' ? 'foundry.toml' : 'hardhat.config.ts', + ); + writeFileSync(native, 'user-owned configuration'); + const before = readdirSync(root); + const plan = planAdoption(root, framework, 'evm'); + assert.deepEqual(readdirSync(root), before); + writeFileSync(resolve(root, 'sunhat.toml'), 'user-owned binding'); + assert.throws( + () => applyScaffold(plan), + /refusing to overwrite existing file/u, + ); + assert.deepEqual( + readdirSync(root).sort(), + [...before, 'sunhat.toml'].sort(), + ); + assert.equal(readFileSync(native, 'utf8'), 'user-owned configuration'); + assert.equal( + readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), + 'user-owned binding', + ); + } +}); + for (const framework of ['hardhat', 'foundry']) { for (const target of ['evm', 'tron']) { test(`${framework}/${target} initialization follows template changes without rebuilding`, (t) => { From df92e151213431e35d3d5403e78286c479517f7f Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Wed, 28 Oct 2026 14:39:39 +0800 Subject: [PATCH 20/24] refactor: decouple installer I/O and remove source-rewriting fixtures --- README.md | 2 + src/toolchain/archive.ts | 19 ++++ src/toolchain/download.ts | 9 ++ src/toolchain/install.ts | 27 ++--- test/cli.test.js | 12 ++- test/fixtures/foundry-init.js | 18 +++- test/fixtures/runtime.js | 20 ++++ test/fixtures/toolchain-config.js | 11 +++ test/fixtures/toolchain-install-loader.js | 36 ------- test/init-commands.test.js | 14 ++- test/init-template-assets.test.js | 24 ++--- test/package.test.js | 9 +- test/toolchain.test.js | 114 ++++++++++++++++++++-- 13 files changed, 227 insertions(+), 88 deletions(-) create mode 100644 src/toolchain/archive.ts create mode 100644 src/toolchain/download.ts create mode 100644 test/fixtures/runtime.js create mode 100644 test/fixtures/toolchain-config.js delete mode 100644 test/fixtures/toolchain-install-loader.js diff --git a/README.md b/README.md index 6fcbc93..dfc6fe3 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,8 @@ npm test `prepack` builds the CLI for both `npm pack` and `npm publish`. +Runtime tests use temporary CLI copies and release configuration for local archives. Installer tests replace download and extraction dependencies where needed; filesystem replacement and rollback tests use real files and directories. + Source builds reject unused declarations, incomplete return paths, and switch fallthrough. ESLint uses type information for `src/` to catch unhandled promises, async callbacks in synchronous APIs, and unsafe type assertions. Template linting does not require installing each generated project's dependencies. Initialization files and Foundry release data live under `templates//common/` and `templates///`. Target files override matching common files. The [TOML compatibility note](docs/toml-binding.md) documents the binding syntax baseline and parser limits. diff --git a/src/toolchain/archive.ts b/src/toolchain/archive.ts new file mode 100644 index 0000000..b322529 --- /dev/null +++ b/src/toolchain/archive.ts @@ -0,0 +1,19 @@ +import { execFile } from 'node:child_process'; +import { promisify } from 'node:util'; + +const execFileAsync = promisify(execFile); + +export async function extractArchive( + archive: string, + destination: string, +): Promise { + if (archive.endsWith('.zip')) { + await execFileAsync('powershell.exe', [ + '-NoProfile', + '-Command', + `Expand-Archive -LiteralPath '${archive.replaceAll("'", "''")}' -DestinationPath '${destination.replaceAll("'", "''")}'`, + ]); + } else { + await execFileAsync('tar', ['-xzf', archive, '-C', destination]); + } +} diff --git a/src/toolchain/download.ts b/src/toolchain/download.ts new file mode 100644 index 0000000..d8e4b6d --- /dev/null +++ b/src/toolchain/download.ts @@ -0,0 +1,9 @@ +import { toolchainError } from '../errors.js'; + +export async function downloadArchive(url: string): Promise { + const response = await fetch(url, { redirect: 'follow' }); + if (!response.ok) { + return toolchainError(`download failed (${response.status}): ${url}`); + } + return Buffer.from(await response.arrayBuffer()); +} diff --git a/src/toolchain/install.ts b/src/toolchain/install.ts index dbb3359..aa654b0 100644 --- a/src/toolchain/install.ts +++ b/src/toolchain/install.ts @@ -1,5 +1,4 @@ import { createHash } from 'node:crypto'; -import { execFile } from 'node:child_process'; import { chmodSync, mkdirSync, @@ -9,24 +8,26 @@ import { writeFileSync, } from 'node:fs'; import { resolve } from 'node:path'; -import { promisify } from 'node:util'; import { errorMessage, hasErrorCode, toolchainError } from '../errors.js'; import type { Target } from '../project/binding.js'; +import { extractArchive } from './archive.js'; +import { downloadArchive } from './download.js'; import { platformKey, releaseFor, releaseUrl } from './releases.js'; -const execFileAsync = promisify(execFile); +interface InstallDependencies { + download: (url: string) => Promise; + extract: (archive: string, destination: string) => Promise; +} export async function installFoundry( root: string, target: Target, + dependencies: Partial = {}, ): Promise { + const { download = downloadArchive, extract = extractArchive } = dependencies; const release = releaseFor(target, root); const url = releaseUrl(release); - const response = await fetch(url, { redirect: 'follow' }); - if (!response.ok) { - return toolchainError(`download failed (${response.status}): ${url}`); - } - const bytes = Buffer.from(await response.arrayBuffer()); + const bytes = await download(url); const digest = createHash('sha256').update(bytes).digest('hex'); if (digest !== release.sha256) { return toolchainError( @@ -45,15 +46,7 @@ export async function installFoundry( const extracted = resolve(temporary, 'extracted'); mkdirSync(extracted); writeFileSync(archive, bytes); - if (release.archive.endsWith('.zip')) { - await execFileAsync('powershell.exe', [ - '-NoProfile', - '-Command', - `Expand-Archive -LiteralPath '${archive.replaceAll("'", "''")}' -DestinationPath '${extracted.replaceAll("'", "''")}'`, - ]); - } else { - await execFileAsync('tar', ['-xzf', archive, '-C', extracted]); - } + await extract(archive, extracted); const prepared = resolve(temporary, 'binaries'); mkdirSync(prepared); const binaries: Record = {}; diff --git a/test/cli.test.js b/test/cli.test.js index cf3d063..be0f824 100644 --- a/test/cli.test.js +++ b/test/cli.test.js @@ -12,15 +12,21 @@ import { dirname, resolve } from 'node:path'; import { spawnSync } from 'node:child_process'; import { fileURLToPath } from 'node:url'; import test, { after } from 'node:test'; -import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; +import { + configureFoundryTemplates, + foundryInitArgs, + foundryInitEnv, +} from './fixtures/foundry-init.js'; +import { copyCliRuntime } from './fixtures/runtime.js'; -const cli = fileURLToPath(new URL('../bin/sunhat.js', import.meta.url)); -const repository = resolve(dirname(cli), '..'); +const repository = fileURLToPath(new URL('../', import.meta.url)); const packageMetadata = JSON.parse( readFileSync(resolve(repository, 'package.json'), 'utf8'), ); const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-cli-')); after(() => rmSync(temporary, { recursive: true, force: true })); +const { packageRoot, cli } = copyCliRuntime(resolve(temporary, 'runtime')); +configureFoundryTemplates(packageRoot); function temp(name) { return mkdtempSync(resolve(temporary, `${name}-`)); diff --git a/test/fixtures/foundry-init.js b/test/fixtures/foundry-init.js index c80f0c0..5a8d519 100644 --- a/test/fixtures/foundry-init.js +++ b/test/fixtures/foundry-init.js @@ -3,6 +3,7 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { resolve } from 'node:path'; import { after } from 'node:test'; +import { setArchiveDigest } from './toolchain-config.js'; const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-init-archive-')); after(() => rmSync(temporary, { recursive: true, force: true })); @@ -39,10 +40,21 @@ if (windows) { } export const foundryInitArgs = [ - '--no-warnings', - '--experimental-loader', - new URL('./toolchain-install-loader.js', import.meta.url).href, '--import', new URL('./toolchain-install-download.js', import.meta.url).href, ]; export const foundryInitEnv = { SUNHAT_TEST_ARCHIVE: archive }; + +export function configureFoundryTemplates(packageRoot) { + for (const target of ['evm', 'tron']) { + setArchiveDigest( + resolve( + packageRoot, + 'templates/foundry', + target, + 'foundry-toolchain.json', + ), + archive, + ); + } +} diff --git a/test/fixtures/runtime.js b/test/fixtures/runtime.js new file mode 100644 index 0000000..0e727e5 --- /dev/null +++ b/test/fixtures/runtime.js @@ -0,0 +1,20 @@ +import { cpSync, mkdirSync, symlinkSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const repository = fileURLToPath(new URL('../../', import.meta.url)); + +export function copyCliRuntime(packageRoot) { + mkdirSync(packageRoot); + for (const name of ['bin', 'dist', 'templates', 'package.json']) { + cpSync(resolve(repository, name), resolve(packageRoot, name), { + recursive: true, + }); + } + symlinkSync( + resolve(repository, 'node_modules'), + resolve(packageRoot, 'node_modules'), + process.platform === 'win32' ? 'junction' : 'dir', + ); + return { packageRoot, cli: resolve(packageRoot, 'bin/sunhat.js') }; +} diff --git a/test/fixtures/toolchain-config.js b/test/fixtures/toolchain-config.js new file mode 100644 index 0000000..9bcea53 --- /dev/null +++ b/test/fixtures/toolchain-config.js @@ -0,0 +1,11 @@ +import { createHash } from 'node:crypto'; +import { readFileSync, writeFileSync } from 'node:fs'; + +export function setArchiveDigest(configuration, archive) { + const config = JSON.parse(readFileSync(configuration, 'utf8')); + const platform = `${process.platform}-${process.arch === 'x64' ? 'amd64' : process.arch}`; + config.platforms[platform].sha256 = createHash('sha256') + .update(readFileSync(archive)) + .digest('hex'); + writeFileSync(configuration, `${JSON.stringify(config, null, 2)}\n`); +} diff --git a/test/fixtures/toolchain-install-loader.js b/test/fixtures/toolchain-install-loader.js deleted file mode 100644 index e36b30a..0000000 --- a/test/fixtures/toolchain-install-loader.js +++ /dev/null @@ -1,36 +0,0 @@ -import { createHash } from 'node:crypto'; -import { readFileSync } from 'node:fs'; -import { resolve } from 'node:path'; -import { pathToFileURL } from 'node:url'; - -const releasesUrl = process.env.SUNHAT_TEST_PACKAGE_ROOT - ? pathToFileURL( - resolve( - process.env.SUNHAT_TEST_PACKAGE_ROOT, - 'dist/toolchain/releases.js', - ), - ).href - : new URL('../../dist/toolchain/releases.js', import.meta.url).href; - -// Keep the production release names and binary mapping. Only replace the archive -// digest so installation can verify a small, locally generated archive offline. -export async function load(url, context, nextLoad) { - if (url !== releasesUrl) { - return nextLoad(url, context); - } - const digest = createHash('sha256') - .update(readFileSync(process.env.SUNHAT_TEST_ARCHIVE)) - .digest('hex'); - return { - format: 'module', - shortCircuit: true, - source: ` - import * as original from ${JSON.stringify(`${releasesUrl}?original`)}; - export const platformKey = original.platformKey; - export const releaseUrl = original.releaseUrl; - export function releaseFor(target, root) { - return { ...original.releaseFor(target, root), sha256: ${JSON.stringify(digest)} }; - } - `, - }; -} diff --git a/test/init-commands.test.js b/test/init-commands.test.js index 33c9702..4682bf2 100644 --- a/test/init-commands.test.js +++ b/test/init-commands.test.js @@ -14,11 +14,19 @@ import { tmpdir } from 'node:os'; import { dirname, resolve } from 'node:path'; import { spawnSync } from 'node:child_process'; import { fileURLToPath } from 'node:url'; -import test from 'node:test'; -import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; +import test, { after } from 'node:test'; +import { + configureFoundryTemplates, + foundryInitArgs, + foundryInitEnv, +} from './fixtures/foundry-init.js'; +import { copyCliRuntime } from './fixtures/runtime.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); -const cli = resolve(repository, 'bin/sunhat.js'); +const runtime = mkdtempSync(resolve(tmpdir(), 'sunhat-command-runtime-')); +after(() => rmSync(runtime, { recursive: true, force: true })); +const { packageRoot, cli } = copyCliRuntime(resolve(runtime, 'package')); +configureFoundryTemplates(packageRoot); const downloadFixture = fileURLToPath( new URL('./fixtures/toolchain-download.js', import.meta.url), ); diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js index f3c56a5..b2e05dc 100644 --- a/test/init-template-assets.test.js +++ b/test/init-template-assets.test.js @@ -1,7 +1,6 @@ import assert from 'node:assert/strict'; import { spawnSync } from 'node:child_process'; import fs, { - cpSync, existsSync, mkdirSync, mkdtempSync, @@ -17,7 +16,12 @@ import { tmpdir } from 'node:os'; import { basename, dirname, relative, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; -import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; +import { + configureFoundryTemplates, + foundryInitArgs, + foundryInitEnv, +} from './fixtures/foundry-init.js'; +import { copyCliRuntime } from './fixtures/runtime.js'; import { initProject } from '../dist/commands/init.js'; import { CliError } from '../dist/errors.js'; import { applyScaffold } from '../dist/scaffold/apply.js'; @@ -37,18 +41,9 @@ function runtime(t) { temporary, process.platform === 'win32' ? 'package with spaces' : 'package "quoted"', ); - mkdirSync(packageRoot); - for (const name of ['bin', 'dist', 'templates', 'package.json']) { - cpSync(resolve(repository, name), resolve(packageRoot, name), { - recursive: true, - }); - } - symlinkSync( - resolve(repository, 'node_modules'), - resolve(packageRoot, 'node_modules'), - process.platform === 'win32' ? 'junction' : 'dir', - ); - return { temporary, packageRoot, cli: resolve(packageRoot, 'bin/sunhat.js') }; + const fixture = copyCliRuntime(packageRoot); + configureFoundryTemplates(packageRoot); + return { temporary, ...fixture }; } function json(path, value) { @@ -67,7 +62,6 @@ function run(fixture, args) { env: { ...process.env, ...foundryInitEnv, - SUNHAT_TEST_PACKAGE_ROOT: fixture.packageRoot, }, }, ); diff --git a/test/package.test.js b/test/package.test.js index dce6b1c..2ce744a 100644 --- a/test/package.test.js +++ b/test/package.test.js @@ -15,7 +15,11 @@ import { tmpdir } from 'node:os'; import { resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; -import { foundryInitArgs, foundryInitEnv } from './fixtures/foundry-init.js'; +import { + configureFoundryTemplates, + foundryInitArgs, + foundryInitEnv, +} from './fixtures/foundry-init.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); const metadata = JSON.parse( @@ -139,6 +143,7 @@ test( }, ); + configureFoundryTemplates(installed); for (const framework of ['foundry', 'hardhat']) { for (const target of ['evm', 'tron']) { await t.test( @@ -158,7 +163,7 @@ test( ], consumer, { - env: { ...foundryInitEnv, SUNHAT_TEST_PACKAGE_ROOT: installed }, + env: foundryInitEnv, }, ); const manifest = JSON.parse( diff --git a/test/toolchain.test.js b/test/toolchain.test.js index 173f88a..8f1cd4b 100644 --- a/test/toolchain.test.js +++ b/test/toolchain.test.js @@ -13,17 +13,15 @@ import { writeFileSync, } from 'node:fs'; import { tmpdir } from 'node:os'; -import { resolve } from 'node:path'; +import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; import { platformKey, releaseFor } from '../dist/toolchain/releases.js'; +import { installFoundry } from '../dist/toolchain/install.js'; +import { setArchiveDigest } from './fixtures/toolchain-config.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); const cli = resolve(repository, 'bin/sunhat.js'); -const loader = new URL( - './fixtures/toolchain-install-loader.js', - import.meta.url, -).href; const download = new URL( './fixtures/toolchain-install-download.js', import.meta.url, @@ -141,6 +139,7 @@ function writeArchive(fixture, { label = 'fixture', missingTool } = {}) { 0, compressed.stderr || String(compressed.error ?? ''), ); + setArchiveDigest(resolve(fixture.root, 'foundry-toolchain.json'), archive); } function installFixture(t, target, directory = tmpdir()) { @@ -160,16 +159,28 @@ function installFixture(t, target, directory = tmpdir()) { log: resolve(temporary, 'download-url.txt'), renameLog: resolve(temporary, 'renames.jsonl'), }; + mkdirSync(fixture.root); + writeFileSync(resolve(fixture.root, 'foundry.toml'), '[profile.default]\n'); + writeFileSync( + resolve(fixture.root, 'foundry-toolchain.json'), + readFileSync( + resolve( + repository, + 'templates/foundry', + target, + 'foundry-toolchain.json', + ), + ), + ); writeArchive(fixture); const initialized = spawnSync( process.execPath, [ - '--experimental-loader', - loader, '--import', download, cli, 'init', + '--adopt', '--target', target, fixture.root, @@ -196,8 +207,6 @@ function install(fixture, fault) { return spawnSync( process.execPath, [ - '--experimental-loader', - loader, '--import', download, ...(fault ? ['--import', faults] : []), @@ -264,6 +273,93 @@ function assertClean(root, target) { assert.deepEqual(readdirSync(resolve(root, '.sunhat/toolchains')), [target]); } +test('the installer accepts a download dependency while using native archive extraction', async (t) => { + const fixture = installFixture(t, 'evm'); + const previous = snapshot(fixture.root); + writeArchive(fixture, { label: 'service replacement' }); + let requested; + assert.equal( + await installFoundry(fixture.root, 'evm', { + download: async (url) => { + requested = url; + return readFileSync(fixture.archive); + }, + }), + 0, + ); + assert.equal(requested, readFileSync(fixture.log, 'utf8')); + const installed = snapshot(fixture.root); + for (const [path, bytes] of Object.entries(installed.binaries)) { + assert.notDeepEqual(bytes, previous.binaries[path]); + assert.deepEqual(bytes, fixture.contents[path.split('/').at(-1)]); + } + assertPreserved(fixture.root, installed); + assertClean(fixture.root, 'evm'); +}); + +test('a download dependency failure leaves the installed toolchain intact', async (t) => { + const fixture = installFixture(t, 'evm'); + const previous = snapshot(fixture.root); + const failure = new Error('injected download boundary failure'); + await assert.rejects( + installFoundry(fixture.root, 'evm', { + download: async () => { + throw failure; + }, + extract: async () => { + assert.fail('extraction must not run after a download failure'); + }, + }), + (error) => error === failure, + ); + assertPreserved(fixture.root, previous); + assertClean(fixture.root, 'evm'); +}); + +test('downloaded bytes are verified before the extraction dependency is called', async (t) => { + const fixture = installFixture(t, 'evm'); + const previous = snapshot(fixture.root); + await assert.rejects( + installFoundry(fixture.root, 'evm', { + download: async () => Buffer.from('invalid archive'), + extract: async () => { + assert.fail('extraction must not run before checksum verification'); + }, + }), + (error) => { + assert.equal(error.exitCode, 3); + assert.match(error.message, /archive digest mismatch/u); + return true; + }, + ); + assertPreserved(fixture.root, previous); + assertClean(fixture.root, 'evm'); +}); + +test('an extraction dependency failure cleans staging and preserves the installed toolchain', async (t) => { + const fixture = installFixture(t, 'evm'); + const previous = snapshot(fixture.root); + writeArchive(fixture, { label: 'service replacement' }); + const failure = new Error('injected extraction boundary failure'); + await assert.rejects( + installFoundry(fixture.root, 'evm', { + download: async () => readFileSync(fixture.archive), + extract: async (archive, destination) => { + assert.deepEqual(readFileSync(archive), readFileSync(fixture.archive)); + assert.ok(statSync(destination).isDirectory()); + assert.equal( + statSync(dirname(destination)).dev, + statSync(fixture.root).dev, + ); + throw failure; + }, + }), + (error) => error === failure, + ); + assertPreserved(fixture.root, previous); + assertClean(fixture.root, 'evm'); +}); + for (const target of ['evm', 'tron']) { for (const [platform, arch] of [ ['win32', 'x64'], From 87f792bc26506ee646cd457875414bb32ccf533d Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Wed, 28 Oct 2026 14:47:34 +0800 Subject: [PATCH 21/24] refactor: consolidate source layout and CLI modules --- bin/sunhat.js | 2 +- src/adapters/foundry.ts | 2 +- src/adapters/hardhat.ts | 4 +- src/cli/init-options.ts | 50 ----------------- src/cli/init.ts | 83 ++++++++++++++++++++++++++++ src/{bin/sunhat.ts => cli/main.ts} | 4 +- src/cli/router.ts | 4 +- src/{commands => cli}/toolchain.ts | 0 src/commands/init.ts | 37 ------------- src/{project => }/json.ts | 2 +- src/package.ts | 2 +- src/{process/spawn.ts => process.ts} | 2 +- src/toolchain/archive.ts | 19 ------- src/toolchain/download.ts | 9 --- src/toolchain/install.ts | 29 +++++++++- src/toolchain/lock.ts | 2 +- src/toolchain/releases.ts | 2 +- test/fixtures/process-forwarding.js | 2 +- test/init-commands.test.js | 2 +- test/init-template-assets.test.js | 2 +- test/package.test.js | 2 +- test/process.test.js | 2 +- 22 files changed, 128 insertions(+), 135 deletions(-) delete mode 100644 src/cli/init-options.ts create mode 100644 src/cli/init.ts rename src/{bin/sunhat.ts => cli/main.ts} (82%) rename src/{commands => cli}/toolchain.ts (100%) delete mode 100644 src/commands/init.ts rename src/{project => }/json.ts (89%) rename src/{process/spawn.ts => process.ts} (97%) delete mode 100644 src/toolchain/archive.ts delete mode 100644 src/toolchain/download.ts diff --git a/bin/sunhat.js b/bin/sunhat.js index cc13f62..ea9a9e3 100755 --- a/bin/sunhat.js +++ b/bin/sunhat.js @@ -1,2 +1,2 @@ #!/usr/bin/env node -import '../dist/bin/sunhat.js'; +import '../dist/cli/main.js'; diff --git a/src/adapters/foundry.ts b/src/adapters/foundry.ts index d57cd90..09fb03a 100644 --- a/src/adapters/foundry.ts +++ b/src/adapters/foundry.ts @@ -2,7 +2,7 @@ import { realpathSync } from 'node:fs'; import { resolve, sep } from 'node:path'; import { toolchainError } from '../errors.js'; import type { Target } from '../project/binding.js'; -import { spawnNative } from '../process/spawn.js'; +import { spawnNative } from '../process.js'; import { loadToolchain } from '../toolchain/lock.js'; import type { FoundryTool } from '../toolchain/lock.js'; diff --git a/src/adapters/hardhat.ts b/src/adapters/hardhat.ts index c1ff269..58d89cf 100644 --- a/src/adapters/hardhat.ts +++ b/src/adapters/hardhat.ts @@ -2,8 +2,8 @@ import { createRequire } from 'node:module'; import { dirname, isAbsolute, resolve, sep } from 'node:path'; import { existsSync, realpathSync } from 'node:fs'; import { errorMessage, hasErrorCode, toolchainError } from '../errors.js'; -import { spawnNative } from '../process/spawn.js'; -import { isRecord, readJson } from '../project/json.js'; +import { spawnNative } from '../process.js'; +import { isRecord, readJson } from '../json.js'; interface PackageJson { version?: string; diff --git a/src/cli/init-options.ts b/src/cli/init-options.ts deleted file mode 100644 index 3f4c590..0000000 --- a/src/cli/init-options.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { parseArgs } from 'node:util'; -import { CliError, errorMessage, usage } from '../errors.js'; -import type { Framework, Target } from '../project/binding.js'; -import { parseTarget } from './parser.js'; - -export interface InitOptions { - framework: Framework; - target: Target; - path: string; - adopt: boolean; -} - -export function parseInitOptions( - argv: readonly string[], -): InitOptions | undefined { - try { - const { values, positionals } = parseArgs({ - args: [...argv], - options: { - framework: { type: 'string', default: 'foundry' }, - target: { type: 'string', default: 'tron' }, - adopt: { type: 'boolean', default: false }, - help: { type: 'boolean', short: 'h' }, - }, - allowPositionals: true, - strict: true, - }); - if (values.help) { - return undefined; - } - if (positionals.length > 1) { - return usage('init accepts at most one path'); - } - const framework = values.framework; - if (framework !== 'foundry' && framework !== 'hardhat') { - return usage('--framework requires foundry or hardhat'); - } - return { - framework, - target: parseTarget(values.target), - path: positionals[0] ?? '.', - adopt: values.adopt, - }; - } catch (error) { - if (error instanceof CliError) { - throw error; - } - return usage(errorMessage(error), { cause: error }); - } -} diff --git a/src/cli/init.ts b/src/cli/init.ts new file mode 100644 index 0000000..3586a7e --- /dev/null +++ b/src/cli/init.ts @@ -0,0 +1,83 @@ +import { resolve } from 'node:path'; +import { parseArgs } from 'node:util'; +import { CliError, errorMessage, usage } from '../errors.js'; +import type { Framework, Target } from '../project/binding.js'; +import { applyScaffold } from '../scaffold/apply.js'; +import { planAdoption, planScaffold } from '../scaffold/plan.js'; +import { installFoundry } from '../toolchain/install.js'; +import { parseTarget } from './parser.js'; + +interface InitOptions { + framework: Framework; + target: Target; + path: string; + adopt: boolean; +} + +export async function initProject(argv: readonly string[]): Promise { + const options = parseInitOptions(argv); + if (!options) { + process.stdout.write( + 'Usage: sunhat init [--framework ] [--target ] [--adopt] [path]\nDefaults: framework=foundry, target=tron\n', + ); + return 0; + } + const { framework, target } = options; + const root = resolve(options.path); + const plan = options.adopt + ? planAdoption(root, framework, target) + : planScaffold(root, framework, target); + applyScaffold(plan); + if (framework === 'foundry') { + try { + await installFoundry(root, target); + } catch (error) { + throw new CliError( + `${errorMessage(error)}; project files are in ${root}; retry with \`sunhat toolchain install\``, + error instanceof CliError ? error.exitCode : 6, + { cause: error }, + ); + } + } + process.stderr.write( + `${options.adopt ? 'adopted' : 'initialized'} ${framework}/${target} project at ${root}\n`, + ); + return 0; +} + +function parseInitOptions(argv: readonly string[]): InitOptions | undefined { + try { + const { values, positionals } = parseArgs({ + args: [...argv], + options: { + framework: { type: 'string', default: 'foundry' }, + target: { type: 'string', default: 'tron' }, + adopt: { type: 'boolean', default: false }, + help: { type: 'boolean', short: 'h' }, + }, + allowPositionals: true, + strict: true, + }); + if (values.help) { + return undefined; + } + if (positionals.length > 1) { + return usage('init accepts at most one path'); + } + const framework = values.framework; + if (framework !== 'foundry' && framework !== 'hardhat') { + return usage('--framework requires foundry or hardhat'); + } + return { + framework, + target: parseTarget(values.target), + path: positionals[0] ?? '.', + adopt: values.adopt, + }; + } catch (error) { + if (error instanceof CliError) { + throw error; + } + return usage(errorMessage(error), { cause: error }); + } +} diff --git a/src/bin/sunhat.ts b/src/cli/main.ts similarity index 82% rename from src/bin/sunhat.ts rename to src/cli/main.ts index aac1d45..46ff37f 100644 --- a/src/bin/sunhat.ts +++ b/src/cli/main.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import { parse } from '../cli/parser.js'; -import { route } from '../cli/router.js'; +import { parse } from './parser.js'; +import { route } from './router.js'; import { CliError, errorMessage } from '../errors.js'; try { diff --git a/src/cli/router.ts b/src/cli/router.ts index a5c1f85..a81c561 100644 --- a/src/cli/router.ts +++ b/src/cli/router.ts @@ -1,8 +1,8 @@ import { resolve } from 'node:path'; import { runHardhat } from '../adapters/hardhat.js'; import { runFoundry } from '../adapters/foundry.js'; -import { initProject } from '../commands/init.js'; -import { toolchain } from '../commands/toolchain.js'; +import { initProject } from './init.js'; +import { toolchain } from './toolchain.js'; import { usage } from '../errors.js'; import { readPackageMetadata } from '../package.js'; import { readBinding } from '../project/binding.js'; diff --git a/src/commands/toolchain.ts b/src/cli/toolchain.ts similarity index 100% rename from src/commands/toolchain.ts rename to src/cli/toolchain.ts diff --git a/src/commands/init.ts b/src/commands/init.ts deleted file mode 100644 index c7cd621..0000000 --- a/src/commands/init.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { resolve } from 'node:path'; -import { parseInitOptions } from '../cli/init-options.js'; -import { CliError, errorMessage } from '../errors.js'; -import { applyScaffold } from '../scaffold/apply.js'; -import { planAdoption, planScaffold } from '../scaffold/plan.js'; -import { installFoundry } from '../toolchain/install.js'; - -export async function initProject(argv: readonly string[]): Promise { - const options = parseInitOptions(argv); - if (!options) { - process.stdout.write( - 'Usage: sunhat init [--framework ] [--target ] [--adopt] [path]\nDefaults: framework=foundry, target=tron\n', - ); - return 0; - } - const { framework, target } = options; - const root = resolve(options.path); - const plan = options.adopt - ? planAdoption(root, framework, target) - : planScaffold(root, framework, target); - applyScaffold(plan); - if (framework === 'foundry') { - try { - await installFoundry(root, target); - } catch (error) { - throw new CliError( - `${errorMessage(error)}; project files are in ${root}; retry with \`sunhat toolchain install\``, - error instanceof CliError ? error.exitCode : 6, - { cause: error }, - ); - } - } - process.stderr.write( - `${options.adopt ? 'adopted' : 'initialized'} ${framework}/${target} project at ${root}\n`, - ); - return 0; -} diff --git a/src/project/json.ts b/src/json.ts similarity index 89% rename from src/project/json.ts rename to src/json.ts index 36f8063..982aa33 100644 --- a/src/project/json.ts +++ b/src/json.ts @@ -1,5 +1,5 @@ import { readFileSync } from 'node:fs'; -import { errorMessage, hasErrorCode, toolchainError } from '../errors.js'; +import { errorMessage, hasErrorCode, toolchainError } from './errors.js'; export function readJson(path: string, missingMessage?: string): unknown { try { diff --git a/src/package.ts b/src/package.ts index 6f98a6b..cb82e23 100644 --- a/src/package.ts +++ b/src/package.ts @@ -2,7 +2,7 @@ import { readFileSync } from 'node:fs'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import { CliError, errorMessage } from './errors.js'; -import { isRecord } from './project/json.js'; +import { isRecord } from './json.js'; export const packageRoot = resolve( dirname(fileURLToPath(import.meta.url)), diff --git a/src/process/spawn.ts b/src/process.ts similarity index 97% rename from src/process/spawn.ts rename to src/process.ts index 7d739ec..37e91ff 100644 --- a/src/process/spawn.ts +++ b/src/process.ts @@ -1,6 +1,6 @@ import { spawn } from 'node:child_process'; import { constants } from 'node:os'; -import { CliError } from '../errors.js'; +import { CliError } from './errors.js'; export async function spawnNative( executable: string, diff --git a/src/toolchain/archive.ts b/src/toolchain/archive.ts deleted file mode 100644 index b322529..0000000 --- a/src/toolchain/archive.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { execFile } from 'node:child_process'; -import { promisify } from 'node:util'; - -const execFileAsync = promisify(execFile); - -export async function extractArchive( - archive: string, - destination: string, -): Promise { - if (archive.endsWith('.zip')) { - await execFileAsync('powershell.exe', [ - '-NoProfile', - '-Command', - `Expand-Archive -LiteralPath '${archive.replaceAll("'", "''")}' -DestinationPath '${destination.replaceAll("'", "''")}'`, - ]); - } else { - await execFileAsync('tar', ['-xzf', archive, '-C', destination]); - } -} diff --git a/src/toolchain/download.ts b/src/toolchain/download.ts deleted file mode 100644 index d8e4b6d..0000000 --- a/src/toolchain/download.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { toolchainError } from '../errors.js'; - -export async function downloadArchive(url: string): Promise { - const response = await fetch(url, { redirect: 'follow' }); - if (!response.ok) { - return toolchainError(`download failed (${response.status}): ${url}`); - } - return Buffer.from(await response.arrayBuffer()); -} diff --git a/src/toolchain/install.ts b/src/toolchain/install.ts index aa654b0..839fc8a 100644 --- a/src/toolchain/install.ts +++ b/src/toolchain/install.ts @@ -1,4 +1,5 @@ import { createHash } from 'node:crypto'; +import { execFile } from 'node:child_process'; import { chmodSync, mkdirSync, @@ -8,12 +9,13 @@ import { writeFileSync, } from 'node:fs'; import { resolve } from 'node:path'; +import { promisify } from 'node:util'; import { errorMessage, hasErrorCode, toolchainError } from '../errors.js'; import type { Target } from '../project/binding.js'; -import { extractArchive } from './archive.js'; -import { downloadArchive } from './download.js'; import { platformKey, releaseFor, releaseUrl } from './releases.js'; +const execFileAsync = promisify(execFile); + interface InstallDependencies { download: (url: string) => Promise; extract: (archive: string, destination: string) => Promise; @@ -123,6 +125,29 @@ export async function installFoundry( } } +async function downloadArchive(url: string): Promise { + const response = await fetch(url, { redirect: 'follow' }); + if (!response.ok) { + return toolchainError(`download failed (${response.status}): ${url}`); + } + return Buffer.from(await response.arrayBuffer()); +} + +async function extractArchive( + archive: string, + destination: string, +): Promise { + if (archive.endsWith('.zip')) { + await execFileAsync('powershell.exe', [ + '-NoProfile', + '-Command', + `Expand-Archive -LiteralPath '${archive.replaceAll("'", "''")}' -DestinationPath '${destination.replaceAll("'", "''")}'`, + ]); + } else { + await execFileAsync('tar', ['-xzf', archive, '-C', destination]); + } +} + function removeTemporaryDirectory(path: string): void { try { rmSync(path, { recursive: true, force: true }); diff --git a/src/toolchain/lock.ts b/src/toolchain/lock.ts index a2e3dd2..2958a7f 100644 --- a/src/toolchain/lock.ts +++ b/src/toolchain/lock.ts @@ -1,7 +1,7 @@ import { resolve } from 'node:path'; import { toolchainError } from '../errors.js'; import type { Target } from '../project/binding.js'; -import { isRecord, readJson } from '../project/json.js'; +import { isRecord, readJson } from '../json.js'; export type FoundryTool = 'forge' | 'cast' | 'anvil' | 'chisel'; diff --git a/src/toolchain/releases.ts b/src/toolchain/releases.ts index 78d201e..e415463 100644 --- a/src/toolchain/releases.ts +++ b/src/toolchain/releases.ts @@ -3,7 +3,7 @@ import { basename, resolve } from 'node:path'; import type { Target } from '../project/binding.js'; import { toolchainError } from '../errors.js'; import { packageRoot } from '../package.js'; -import { isRecord, readJson } from '../project/json.js'; +import { isRecord, readJson } from '../json.js'; import type { FoundryTool } from './lock.js'; export interface Release { diff --git a/test/fixtures/process-forwarding.js b/test/fixtures/process-forwarding.js index d6a2000..b6fc3a6 100644 --- a/test/fixtures/process-forwarding.js +++ b/test/fixtures/process-forwarding.js @@ -1,4 +1,4 @@ -import { spawnNative } from '../../dist/process/spawn.js'; +import { spawnNative } from '../../dist/process.js'; const status = await spawnNative( process.execPath, diff --git a/test/init-commands.test.js b/test/init-commands.test.js index 4682bf2..250e838 100644 --- a/test/init-commands.test.js +++ b/test/init-commands.test.js @@ -47,7 +47,7 @@ for (const flag of ['--help', '-h']) { const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-init-help-')); t.after(() => rmSync(temporary, { recursive: true, force: true })); const destination = resolve(temporary, 'unused-project'); - const moduleUrl = new URL('../dist/commands/init.js', import.meta.url).href; + const moduleUrl = new URL('../dist/cli/init.js', import.meta.url).href; const program = ` import { initProject } from ${JSON.stringify(moduleUrl)}; const status = await initProject(${JSON.stringify([flag, destination])}); diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js index b2e05dc..f9476c1 100644 --- a/test/init-template-assets.test.js +++ b/test/init-template-assets.test.js @@ -22,7 +22,7 @@ import { foundryInitEnv, } from './fixtures/foundry-init.js'; import { copyCliRuntime } from './fixtures/runtime.js'; -import { initProject } from '../dist/commands/init.js'; +import { initProject } from '../dist/cli/init.js'; import { CliError } from '../dist/errors.js'; import { applyScaffold } from '../dist/scaffold/apply.js'; import { planAdoption, planScaffold } from '../dist/scaffold/plan.js'; diff --git a/test/package.test.js b/test/package.test.js index 2ce744a..5f3b5a5 100644 --- a/test/package.test.js +++ b/test/package.test.js @@ -96,7 +96,7 @@ test( 'the artifact contains runtime files, templates and documentation', () => { for (const path of [ - 'dist/bin/sunhat.js', + 'dist/cli/main.js', 'dist/package.js', 'templates', 'README.md', diff --git a/test/process.test.js b/test/process.test.js index de88dfa..0fa3e56 100644 --- a/test/process.test.js +++ b/test/process.test.js @@ -7,7 +7,7 @@ import { resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; import { CliError } from '../dist/errors.js'; -import { spawnNative } from '../dist/process/spawn.js'; +import { spawnNative } from '../dist/process.js'; function temporary(t) { const root = realpathSync(mkdtempSync(resolve(tmpdir(), 'sunhat-process-'))); From 8922d573d0eb285fd663c0cdde515c659d85d5b0 Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Wed, 28 Oct 2026 15:25:42 +0800 Subject: [PATCH 22/24] test: make binding assertions independent of line endings --- test/init-commands.test.js | 8 ++++---- test/package.test.js | 12 +++++------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/test/init-commands.test.js b/test/init-commands.test.js index 250e838..3d2d3fd 100644 --- a/test/init-commands.test.js +++ b/test/init-commands.test.js @@ -15,6 +15,7 @@ import { dirname, resolve } from 'node:path'; import { spawnSync } from 'node:child_process'; import { fileURLToPath } from 'node:url'; import test, { after } from 'node:test'; +import { parse } from 'smol-toml'; import { configureFoundryTemplates, foundryInitArgs, @@ -160,10 +161,9 @@ function project(t, framework, target) { ]); assert.equal(initialized.status, 0, initialized.stderr); const root = realpathSync(destination); - assert.equal( - readFileSync(resolve(root, 'sunhat.toml'), 'utf8'), - `[project]\nframework = "${framework}"\ntarget = "${target}"\n`, - ); + const binding = parse(readFileSync(resolve(root, 'sunhat.toml'), 'utf8')); + assert.equal(binding.project.framework, framework); + assert.equal(binding.project.target, target); const nested = resolve(root, 'nested directory', 'contracts'); mkdirSync(nested, { recursive: true }); const log = resolve(temporary, 'invocations.jsonl'); diff --git a/test/package.test.js b/test/package.test.js index 5f3b5a5..017c679 100644 --- a/test/package.test.js +++ b/test/package.test.js @@ -15,6 +15,7 @@ import { tmpdir } from 'node:os'; import { resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; +import { parse } from 'smol-toml'; import { configureFoundryTemplates, foundryInitArgs, @@ -173,14 +174,11 @@ test( manifest.devDependencies.sunhat, `npm:${metadata.name}@${metadata.version}`, ); - const binding = readFileSync( - resolve(project, 'sunhat.toml'), - 'utf8', - ); - assert.equal( - binding, - `[project]\nframework = "${framework}"\ntarget = "${target}"\n`, + const binding = parse( + readFileSync(resolve(project, 'sunhat.toml'), 'utf8'), ); + assert.equal(binding.project.framework, framework); + assert.equal(binding.project.target, target); const readme = readFileSync(resolve(project, 'README.md'), 'utf8'); assert.ok(readme.includes(`${metadata.name}@${metadata.version}`)); assert.doesNotMatch(readme, /\{\{sunhatPackage\}\}/u); From 54dbaba60fe33e5d72fcb2e6d9ddf93f242ac748 Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Wed, 28 Oct 2026 16:54:42 +0800 Subject: [PATCH 23/24] refactor: separate project init from toolchain install --- README.md | 13 +- docs/QuickStart.md | 25 +-- src/cli/init.ts | 19 +-- src/cli/router.ts | 1 + src/toolchain/install.ts | 86 ++++++++--- templates/foundry/evm/README.md | 7 +- templates/foundry/tron/README.md | 7 +- templates/hardhat/tron/README.md | 10 +- templates/hardhat/tron/hardhat.config.ts | 2 +- test/cli.test.js | 25 ++- .../{foundry-init.js => foundry-install.js} | 6 +- test/fixtures/toolchain-install-download.js | 7 +- test/init-commands.test.js | 83 ++++++---- test/init-template-assets.test.js | 30 +--- test/package.test.js | 53 +++++-- test/template-types.test.js | 31 +++- test/toolchain.test.js | 144 +++++++++++++++--- 17 files changed, 396 insertions(+), 153 deletions(-) rename test/fixtures/{foundry-init.js => foundry-install.js} (90%) diff --git a/README.md b/README.md index dfc6fe3..d2bdd0a 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,12 @@ Sunhat 2 is a project CLI for Hardhat 2 and Foundry on EVM and TRON. It selects ## What changed from v1 -| Area | Sunhat 1.x | Sunhat 2 | -| -------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | -| Architecture | Hardhat plugin with a CLI proxy | Project CLI with separate Hardhat and Foundry adapters | -| Configuration | Sunhat's Hardhat plugin API | `sunhat.toml` binds the framework and target; native framework configuration stays in the project | -| Initialization | Hardhat-oriented scaffold with automatic npm installation | Four framework/target templates, explicit npm installation, and `--adopt` for existing projects | -| Foundry | Used alongside the Hardhat workflow | Project-local EVM or TRON toolchain installed and verified during `init` | +| Area | Sunhat 1.x | Sunhat 2 | +| -------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | +| Architecture | Hardhat plugin with a CLI proxy | Project CLI with separate Hardhat and Foundry adapters | +| Configuration | Sunhat's Hardhat plugin API | `sunhat.toml` binds the framework and target; native framework configuration stays in the project | +| Initialization | Hardhat-oriented scaffold with automatic npm installation | Four framework/target templates, separate dependency installation, and `--adopt` for existing projects | +| Foundry | Used alongside the Hardhat workflow | Project-local EVM or TRON toolchain installed with `sunhat toolchain install` | Commands use the selected framework's syntax: `sunhat compile` for Hardhat, `sunhat build` for Foundry, and `sunhat test` for either. V1 plugin APIs such as deployment tracking and named accounts are not provided by the v2 CLI; migration requires reviewing the project's plugins and scripts. @@ -25,6 +25,7 @@ Use Node.js 20.11 or newer. The default project is Foundry + TRON: npm install --global @sun-protocol/sunhat@2.0.0 sunhat init counter cd counter +sunhat toolchain install sunhat build sunhat test ``` diff --git a/docs/QuickStart.md b/docs/QuickStart.md index 85dc3eb..744a6ad 100644 --- a/docs/QuickStart.md +++ b/docs/QuickStart.md @@ -5,8 +5,8 @@ Sunhat runs Hardhat or Foundry using the framework and target recorded in the pr ## Requirements - Node.js **20.11+** for Sunhat. Node.js 24 is used for repository development and validation. -- Foundry initialization needs access to the configured GitHub release and `tar` on macOS/Linux or PowerShell on Windows. Its toolchain installer supports macOS/Linux arm64 and x64, and Windows x64. -- The default Hardhat TRON test setup needs Docker running locally for TRE. Hardhat projects currently require **Hardhat 2**, declared as an exact version matching the installed package. +- Foundry toolchain installation needs access to the configured GitHub release and `tar` on macOS/Linux or PowerShell on Windows. Its installer supports macOS/Linux arm64 and x64, and Windows x64. +- Hardhat projects currently require **Hardhat 2**, declared as an exact version matching the installed package. Hardhat TRON tests need a running TRE JSON-RPC endpoint. Container startup is disabled by default; Docker is required only if you choose to run TRE in a container. - First compilation needs network access when the compiler is not already cached. ## Install Sunhat @@ -28,18 +28,19 @@ The version command should print `sunhat 2.0.0`. Ensure npm's global executable | Hardhat | TRON | `sunhat init --framework hardhat hardhat-tron` | | Hardhat | EVM | `sunhat init --framework hardhat --target evm hardhat-evm` | -Initialization refuses to overwrite existing destination files. For an existing framework project, use [adoption](#adopt-an-existing-project). +`init` writes project files without downloading toolchains or installing npm packages. It refuses to overwrite existing destination files. For an existing framework project, use [adoption](#adopt-an-existing-project). ### Foundry ```bash sunhat init counter-tron cd counter-tron +sunhat toolchain install sunhat build sunhat test ``` -`init` downloads, verifies, and installs Foundry-TRON into the project's `.sunhat/` directory. For an EVM project, use the EVM initialization command from the table; the build and test commands stay the same. A separate toolchain installation step is unnecessary after successful initialization. +`sunhat toolchain install` selects the archive for the host OS and CPU architecture, verifies it, and installs Foundry-TRON into the project's `.sunhat/` directory. For an EVM project, use the EVM initialization command from the table; the installation, build, and test commands stay the same. ### Hardhat @@ -48,10 +49,12 @@ sunhat init --framework hardhat hardhat-tron cd hardhat-tron npm install sunhat compile +export TRE_URL="http://127.0.0.1:9090/jsonrpc" +export TRE_PRIVATE_KEY="" sunhat test ``` -`init` writes the project files; `npm install` installs Hardhat and its plugins. The TRON template selects `tre` as its default network. The plugin starts a TRE Docker container for tests. To use an existing TRE instance, set `tre.autoStart` to `false` in `hardhat.config.ts` and configure `TRE_URL` and `TRE_PRIVATE_KEY`. +`npm install` installs Hardhat and its plugins. The TRON template selects `tre` as its default network and sets `tre.autoStart` to `false`. Before running tests, point `TRE_URL` and `TRE_PRIVATE_KEY` at a TRE instance you manage. To opt into automatic container startup, set `tre.autoStart` to `true` in `hardhat.config.ts` and have Docker running. For EVM, initialize with `--target evm` and use the same install, compile, and test sequence. The EVM template does not load the TRON plugin. @@ -97,7 +100,7 @@ Run the appropriate command from a directory containing `foundry.toml` or `hardh | Hardhat TRON | `sunhat init --adopt --framework hardhat .` | | Hardhat EVM | `sunhat init --adopt --framework hardhat --target evm .` | -Adoption preserves native framework configuration, source files, tests, and `package.json`. It adds the Sunhat binding. Foundry adoption also adds `foundry-toolchain.json` if missing and installs the toolchain. For Hardhat, install the project's declared dependencies separately. +Adoption preserves native framework configuration, source files, tests, and `package.json`. It adds the Sunhat binding. Foundry adoption also adds `foundry-toolchain.json` if missing; run `sunhat toolchain install` separately. For Hardhat, install the project's declared dependencies separately. To add a local Sunhat CLI to an adopted project: @@ -131,7 +134,7 @@ Run commands from the project root or a subdirectory. Sunhat locates the nearest ## Compiler installation -Compilers are resolved by the framework on first compilation; Foundry initialization installs the tools without predownloading Solidity compilers. +Compilers are resolved by the framework on first compilation. Foundry toolchain installation does not predownload Solidity compilers. | Project | First compilation | Compiler selection | | ---------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------ | @@ -184,16 +187,18 @@ TRON Foundry commands use the project's Foundry-TRON binaries. Anvil and Chisel Plugin tasks are forwarded in the same form: `sunhat [args...]`. Sunhat forwards arguments and the framework's exit status; it does not translate Foundry commands into Hardhat tasks or the reverse. Use `sunhat compile` with Hardhat and `sunhat build` with Foundry. -## Toolchain recovery +## Foundry toolchain installation -If Foundry initialization fails during download or installation, its generated project files remain available. Enter that project directory and retry: +After creating or adopting a Foundry project, enter its directory and install the toolchain: ```bash sunhat toolchain install sunhat toolchain info ``` -`install` retries or reinstalls the release declared in `foundry-toolchain.json`. `info` prints installed metadata. Archive verification belongs to installation; ordinary execution does not rehash binaries or probe their versions. In a Hardhat project, `toolchain` is forwarded as a native task instead. +`install` installs or reinstalls the release declared in `foundry-toolchain.json`. Normal output is limited to `verify` and `Toolchain installed successfully.` Downloads time out after 60 seconds without receiving data; active transfers can take longer. If installation fails, correct the reported issue and rerun the same command. + +`info` prints installed metadata. Archive verification belongs to installation; ordinary execution does not rehash binaries or probe their versions. In a Hardhat project, `toolchain` is forwarded as a native task instead. ## Moving from Sunhat 1.x diff --git a/src/cli/init.ts b/src/cli/init.ts index 3586a7e..a89156b 100644 --- a/src/cli/init.ts +++ b/src/cli/init.ts @@ -4,7 +4,6 @@ import { CliError, errorMessage, usage } from '../errors.js'; import type { Framework, Target } from '../project/binding.js'; import { applyScaffold } from '../scaffold/apply.js'; import { planAdoption, planScaffold } from '../scaffold/plan.js'; -import { installFoundry } from '../toolchain/install.js'; import { parseTarget } from './parser.js'; interface InitOptions { @@ -18,7 +17,7 @@ export async function initProject(argv: readonly string[]): Promise { const options = parseInitOptions(argv); if (!options) { process.stdout.write( - 'Usage: sunhat init [--framework ] [--target ] [--adopt] [path]\nDefaults: framework=foundry, target=tron\n', + 'Usage: sunhat init [--framework ] [--target ] [--adopt] [path]\nDefaults: framework=foundry, target=tron\nCreates project files only; install framework dependencies separately.\n', ); return 0; } @@ -28,20 +27,14 @@ export async function initProject(argv: readonly string[]): Promise { ? planAdoption(root, framework, target) : planScaffold(root, framework, target); applyScaffold(plan); - if (framework === 'foundry') { - try { - await installFoundry(root, target); - } catch (error) { - throw new CliError( - `${errorMessage(error)}; project files are in ${root}; retry with \`sunhat toolchain install\``, - error instanceof CliError ? error.exitCode : 6, - { cause: error }, - ); - } - } process.stderr.write( `${options.adopt ? 'adopted' : 'initialized'} ${framework}/${target} project at ${root}\n`, ); + if (framework === 'foundry') { + process.stderr.write( + 'Next: run `sunhat toolchain install` from the project directory.\n', + ); + } return 0; } diff --git a/src/cli/router.ts b/src/cli/router.ts index a81c561..be8f45a 100644 --- a/src/cli/router.ts +++ b/src/cli/router.ts @@ -16,6 +16,7 @@ Usage: sunhat [args...] Init defaults: framework=foundry, target=tron +Init creates project files only. For Foundry, run \`sunhat toolchain install\` in the project directory. `; export async function route(invocation: Invocation): Promise { diff --git a/src/toolchain/install.ts b/src/toolchain/install.ts index 839fc8a..918a528 100644 --- a/src/toolchain/install.ts +++ b/src/toolchain/install.ts @@ -10,31 +10,40 @@ import { } from 'node:fs'; import { resolve } from 'node:path'; import { promisify } from 'node:util'; -import { errorMessage, hasErrorCode, toolchainError } from '../errors.js'; +import { + CliError, + errorMessage, + hasErrorCode, + toolchainError, +} from '../errors.js'; import type { Target } from '../project/binding.js'; import { platformKey, releaseFor, releaseUrl } from './releases.js'; const execFileAsync = promisify(execFile); -interface InstallDependencies { - download: (url: string) => Promise; - extract: (archive: string, destination: string) => Promise; +interface InstallOptions { + download?: (url: string) => Promise; + extract?: (archive: string, destination: string) => Promise; + downloadIdleTimeoutMs?: number; } export async function installFoundry( root: string, target: Target, - dependencies: Partial = {}, + options: InstallOptions = {}, ): Promise { - const { download = downloadArchive, extract = extractArchive } = dependencies; + const { + downloadIdleTimeoutMs = 60_000, + download = (url) => downloadArchive(url, downloadIdleTimeoutMs), + extract = extractArchive, + } = options; const release = releaseFor(target, root); const url = releaseUrl(release); + process.stderr.write('verify\n'); const bytes = await download(url); const digest = createHash('sha256').update(bytes).digest('hex'); if (digest !== release.sha256) { - return toolchainError( - `archive digest mismatch: expected ${release.sha256}, got ${digest}`, - ); + return toolchainError('archive digest mismatch'); } const toolchains = resolve(root, '.sunhat/toolchains'); @@ -111,9 +120,7 @@ export async function installFoundry( } throw error; } - process.stderr.write( - `installed ${release.source}@${release.revision} from ${url}\n`, - ); + process.stderr.write('Toolchain installed successfully.\n'); return 0; } finally { if (!preserveBackup) { @@ -125,12 +132,57 @@ export async function installFoundry( } } -async function downloadArchive(url: string): Promise { - const response = await fetch(url, { redirect: 'follow' }); - if (!response.ok) { - return toolchainError(`download failed (${response.status}): ${url}`); +async function downloadArchive( + url: string, + idleTimeoutMs: number, +): Promise { + const controller = new AbortController(); + const { signal } = controller; + const timeout = setTimeout(() => controller.abort(), idleTimeoutMs); + timeout.unref(); + let reader: ReadableStreamDefaultReader | undefined; + try { + const response = await fetch(url, { redirect: 'follow', signal }); + timeout.refresh(); + if (!response.ok) { + return toolchainError(`download failed (${response.status})`); + } + if (!response.body) { + return toolchainError('download returned an empty response'); + } + const chunks: Uint8Array[] = []; + let received = 0; + reader = response.body.getReader(); + while (true) { + const { done, value } = await reader.read(); + if (done) { + break; + } + chunks.push(value); + received += value.byteLength; + timeout.refresh(); + } + return Buffer.concat(chunks, received); + } catch (error) { + if (error instanceof CliError) { + throw error; + } + const detail = + error instanceof Error && error.cause + ? `${errorMessage(error)}: ${errorMessage(error.cause)}` + : errorMessage(error); + return toolchainError( + signal.aborted + ? `download timed out after ${idleTimeoutMs / 1_000}s without data` + : `download failed: ${detail}`, + { cause: error }, + ); + } finally { + clearTimeout(timeout); + // Abort any unread error response so its connection cannot keep the CLI alive. + controller.abort(); + reader?.releaseLock(); } - return Buffer.from(await response.arrayBuffer()); } async function extractArchive( diff --git a/templates/foundry/evm/README.md b/templates/foundry/evm/README.md index 89ca9ec..a90b73f 100644 --- a/templates/foundry/evm/README.md +++ b/templates/foundry/evm/README.md @@ -11,7 +11,7 @@ npm install --global {{sunhatPackage}} sunhat --version ``` -Run project commands from this directory or a subdirectory. `sunhat init` has already installed the Foundry toolchain. Global Sunhat uses the binaries in this project's `.sunhat/` directory. +Run project commands from this directory or a subdirectory. Install the Foundry toolchain with the command below before building or testing. Global Sunhat uses the binaries in this project's `.sunhat/` directory. The generated project declares `{{sunhatPackage}}` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. @@ -19,13 +19,14 @@ The generated project declares `{{sunhatPackage}}` as an exact local development ```bash npm install +sunhat toolchain install npm run build npm test ``` The install command installs all declared dependencies. The Sunhat dependency uses an npm alias that is independent of the machine that initialized this project. -`sunhat init` installs and verifies the release declared in `foundry-toolchain.json` and stores the binaries under `.sunhat/toolchains/`. Subsequent commands run the installed executables without rehashing them or probing their versions. If initialization reported an installation failure, retry with `sunhat toolchain install`. Use `toolchain info` to inspect installed metadata. +`sunhat init` only generates project files. `sunhat toolchain install` installs and verifies the release declared in `foundry-toolchain.json` and stores the binaries under `.sunhat/toolchains/`. Subsequent commands run the installed executables without rehashing them or probing their versions. If installation fails, retry with the same install command. Use `toolchain info` to inspect installed metadata. The first `sunhat build` downloads the `solc` version required by the sources if it is not cached. To select the compiler explicitly, set `solc = "0.8.28"` under `[profile.default]` in `foundry.toml`. Initialization does not predownload the compiler. @@ -45,7 +46,7 @@ The first `sunhat build` downloads the `solc` version required by the sources if | `sunhat cast ` | Run a Cast command through the selected toolchain. | | `sunhat anvil` | Start the project-pinned Anvil node. | | `sunhat chisel` | Start the project-pinned Solidity REPL. | -| `sunhat toolchain install` | Retry or reinstall the configured toolchain. | +| `sunhat toolchain install` | Install or reinstall the configured toolchain. | | `sunhat toolchain info` | Print the pinned toolchain metadata. | Arguments after the Sunhat command are passed to Foundry unchanged. diff --git a/templates/foundry/tron/README.md b/templates/foundry/tron/README.md index 5e566f6..96cf381 100644 --- a/templates/foundry/tron/README.md +++ b/templates/foundry/tron/README.md @@ -11,7 +11,7 @@ npm install --global {{sunhatPackage}} sunhat --version ``` -Run project commands from this directory or a subdirectory. `sunhat init` has already installed the Foundry-TRON toolchain. Global Sunhat uses the binaries in this project's `.sunhat/` directory. Anvil and Chisel are unavailable for TRON. +Run project commands from this directory or a subdirectory. Install the Foundry-TRON toolchain with the command below before building or testing. Global Sunhat uses the binaries in this project's `.sunhat/` directory. Anvil and Chisel are unavailable for TRON. The generated project declares `{{sunhatPackage}}` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. @@ -19,13 +19,14 @@ The generated project declares `{{sunhatPackage}}` as an exact local development ```bash npm install +sunhat toolchain install npm run build npm test ``` The install command installs all declared dependencies. The Sunhat dependency uses an npm alias that is independent of the machine that initialized this project. -`sunhat init` installs and verifies the release declared in `foundry-toolchain.json` and stores the binaries under `.sunhat/toolchains/`. Subsequent commands run the installed executables without rehashing them or probing their versions. If initialization reported an installation failure, retry with `sunhat toolchain install`. Use `toolchain info` to inspect installed metadata. +`sunhat init` only generates project files. `sunhat toolchain install` installs and verifies the release declared in `foundry-toolchain.json` and stores the binaries under `.sunhat/toolchains/`. Subsequent commands run the installed executables without rehashing them or probing their versions. If installation fails, retry with the same install command. Use `toolchain info` to inspect installed metadata. ## Commands @@ -42,7 +43,7 @@ The install command installs all declared dependencies. The Sunhat dependency us | `sunhat script ` | Run a Foundry script. | | `sunhat create ` | Deploy a contract through the TRON transaction path. | | `sunhat cast ` | Run a Cast command through Foundry-TRON. | -| `sunhat toolchain install` | Retry or reinstall the configured toolchain. | +| `sunhat toolchain install` | Install or reinstall the configured toolchain. | | `sunhat toolchain info` | Print the pinned toolchain metadata. | Arguments after the Sunhat command are passed to Foundry-TRON unchanged. diff --git a/templates/hardhat/tron/README.md b/templates/hardhat/tron/README.md index c44b97c..84609a4 100644 --- a/templates/hardhat/tron/README.md +++ b/templates/hardhat/tron/README.md @@ -15,13 +15,15 @@ Run project commands from this directory or a subdirectory after the dependency The generated project declares `{{sunhatPackage}}` as an exact local development dependency under the `sunhat` alias. For local-only use, replace `sunhat` with `npx --no-install sunhat` in the examples. `npm run build` and `npm test` use the project's local Sunhat automatically. A global invocation does not automatically switch to the local Sunhat copy. -Docker must be installed and running. The generated configuration starts `tronbox/tre:dev` automatically when required. +The generated configuration sets `tre.autoStart` to `false`. Tests connect to a TRE instance you manage; the default configuration does not start Docker containers. ## Quick start ```bash npm install npm run build +export TRE_URL="http://127.0.0.1:9090/jsonrpc" +export TRE_PRIVATE_KEY="" npm test ``` @@ -44,9 +46,9 @@ The generated configuration selects the `tre` network and compiles contracts wit Arguments after the Sunhat command are passed to Hardhat unchanged. -## External TRE instance +## TRE connection -Set `tre.autoStart` to `false` in `hardhat.config.ts`, then configure both variables to use an existing TRE instance: +Configure both variables to connect to an existing TRE instance: ```bash export TRE_URL="http://127.0.0.1:9090/jsonrpc" @@ -55,3 +57,5 @@ sunhat test ``` Never use the generated TRE development key on a public network. + +To opt into automatic container startup, install and start Docker, then set `tre.autoStart` to `true` in `hardhat.config.ts`. The plugin can then start the configured `tronbox/tre:dev` image when a task needs it. diff --git a/templates/hardhat/tron/hardhat.config.ts b/templates/hardhat/tron/hardhat.config.ts index 23de1e1..28c9a20 100644 --- a/templates/hardhat/tron/hardhat.config.ts +++ b/templates/hardhat/tron/hardhat.config.ts @@ -14,7 +14,7 @@ const config: HardhatUserConfig = { }, }, tre: { - autoStart: true, + autoStart: false, image: 'tronbox/tre:dev', compiler: { target: 'tron' }, }, diff --git a/test/cli.test.js b/test/cli.test.js index be0f824..b9a0186 100644 --- a/test/cli.test.js +++ b/test/cli.test.js @@ -1,6 +1,7 @@ import assert from 'node:assert/strict'; import { chmodSync, + existsSync, mkdirSync, mkdtempSync, readFileSync, @@ -14,9 +15,9 @@ import { fileURLToPath } from 'node:url'; import test, { after } from 'node:test'; import { configureFoundryTemplates, - foundryInitArgs, - foundryInitEnv, -} from './fixtures/foundry-init.js'; + foundryInstallArgs, + foundryInstallEnv, +} from './fixtures/foundry-install.js'; import { copyCliRuntime } from './fixtures/runtime.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); @@ -35,12 +36,18 @@ function temp(name) { function run(cwd, args) { return spawnSync( process.execPath, - [...(args[0] === 'init' ? foundryInitArgs : []), cli, ...args], + [ + ...(args[0] === 'toolchain' && args[1] === 'install' + ? foundryInstallArgs + : []), + cli, + ...args, + ], { cwd, encoding: 'utf8', timeout: 10_000, - env: { ...process.env, ...foundryInitEnv }, + env: { ...process.env, ...foundryInstallEnv }, }, ); } @@ -128,6 +135,10 @@ test('init defaults to Foundry and TRON', () => { ); const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); assert.match(readme, /Foundry TRON Project with Sunhat/u); + assert.equal(existsSync(resolve(root, '.sunhat')), false); + assert.match(result.stderr, /sunhat toolchain install/u); + const installed = run(root, ['toolchain', 'install']); + assert.equal(installed.status, 0, installed.stderr); const build = run(root, ['build']); assert.equal(build.status, 0, build.stderr); assert.equal(build.stdout, '["build"]'); @@ -154,6 +165,10 @@ test('init accepts an explicit Foundry EVM target', () => { const readme = readFileSync(resolve(root, 'README.md'), 'utf8'); assert.match(readme, /Foundry EVM Project with Sunhat/u); assert.doesNotMatch(readme, /network = "tron"/u); + assert.equal(existsSync(resolve(root, '.sunhat')), false); + assert.match(result.stderr, /sunhat toolchain install/u); + const installed = run(root, ['toolchain', 'install']); + assert.equal(installed.status, 0, installed.stderr); const build = run(root, ['build']); assert.equal(build.status, 0, build.stderr); assert.equal(build.stdout, '["build"]'); diff --git a/test/fixtures/foundry-init.js b/test/fixtures/foundry-install.js similarity index 90% rename from test/fixtures/foundry-init.js rename to test/fixtures/foundry-install.js index 5a8d519..c8dc29a 100644 --- a/test/fixtures/foundry-init.js +++ b/test/fixtures/foundry-install.js @@ -5,7 +5,7 @@ import { resolve } from 'node:path'; import { after } from 'node:test'; import { setArchiveDigest } from './toolchain-config.js'; -const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-init-archive-')); +const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-install-archive-')); after(() => rmSync(temporary, { recursive: true, force: true })); const source = resolve(temporary, 'source'); mkdirSync(source); @@ -39,11 +39,11 @@ if (windows) { }); } -export const foundryInitArgs = [ +export const foundryInstallArgs = [ '--import', new URL('./toolchain-install-download.js', import.meta.url).href, ]; -export const foundryInitEnv = { SUNHAT_TEST_ARCHIVE: archive }; +export const foundryInstallEnv = { SUNHAT_TEST_ARCHIVE: archive }; export function configureFoundryTemplates(packageRoot) { for (const target of ['evm', 'tron']) { diff --git a/test/fixtures/toolchain-install-download.js b/test/fixtures/toolchain-install-download.js index 42b76eb..a2a5ac2 100644 --- a/test/fixtures/toolchain-install-download.js +++ b/test/fixtures/toolchain-install-download.js @@ -1,8 +1,13 @@ import { readFileSync, writeFileSync } from 'node:fs'; -globalThis.fetch = async (url) => { +const nativeFetch = globalThis.fetch; + +globalThis.fetch = async (url, options) => { if (process.env.SUNHAT_TEST_DOWNLOAD_LOG) { writeFileSync(process.env.SUNHAT_TEST_DOWNLOAD_LOG, String(url)); } + if (process.env.SUNHAT_TEST_DOWNLOAD_URL) { + return nativeFetch(process.env.SUNHAT_TEST_DOWNLOAD_URL, options); + } return new Response(readFileSync(process.env.SUNHAT_TEST_ARCHIVE)); }; diff --git a/test/init-commands.test.js b/test/init-commands.test.js index 3d2d3fd..0c32e54 100644 --- a/test/init-commands.test.js +++ b/test/init-commands.test.js @@ -18,9 +18,9 @@ import test, { after } from 'node:test'; import { parse } from 'smol-toml'; import { configureFoundryTemplates, - foundryInitArgs, - foundryInitEnv, -} from './fixtures/foundry-init.js'; + foundryInstallArgs, + foundryInstallEnv, +} from './fixtures/foundry-install.js'; import { copyCliRuntime } from './fixtures/runtime.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); @@ -127,8 +127,8 @@ const forgeCommands = [ function run(cwd, args, { env = {}, preload = false } = {}) { const nodeArgs = [ - ...(args[0] === 'init' || (args[0] === 'toolchain' && args[1] === 'install') - ? foundryInitArgs + ...(args[0] === 'toolchain' && args[1] === 'install' + ? foundryInstallArgs : []), ...(preload ? ['--import', downloadFixture] : []), ]; @@ -136,7 +136,7 @@ function run(cwd, args, { env = {}, preload = false } = {}) { cwd, encoding: 'utf8', timeout: 10_000, - env: { ...process.env, ...foundryInitEnv, ...env }, + env: { ...process.env, ...foundryInstallEnv, ...env }, }); } @@ -473,34 +473,55 @@ for (const framework of ['foundry', 'hardhat']) { } for (const target of ['evm', 'tron']) { - test(`init foundry/${target}: failed initialization reports a recoverable install error`, (t) => { - const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-init-failure-')); - t.after(() => rmSync(temporary, { recursive: true, force: true })); - const root = resolve(temporary, 'project'); - const initialized = run(temporary, ['init', '--target', target, root], { - preload: true, - env: { - SUNHAT_TEST_DOWNLOAD: 'digest-mismatch', - SUNHAT_TEST_DOWNLOAD_LOG: resolve(temporary, 'download.txt'), - }, + for (const adopt of [false, true]) { + test(`init${adopt ? ' --adopt' : ''} foundry/${target}: stays offline and leaves installation to an explicit command`, (t) => { + const temporary = mkdtempSync(resolve(tmpdir(), 'sunhat-init-install-')); + t.after(() => rmSync(temporary, { recursive: true, force: true })); + const root = resolve(temporary, 'project'); + if (adopt) { + mkdirSync(root); + writeFileSync(resolve(root, 'foundry.toml'), '[profile.default]\n'); + } + const initialized = run( + temporary, + ['init', ...(adopt ? ['--adopt'] : []), '--target', target, root], + { + preload: true, + env: { + SUNHAT_TEST_DOWNLOAD: 'http-error', + SUNHAT_TEST_DOWNLOAD_LOG: resolve(temporary, 'download.txt'), + }, + }, + ); + assert.equal(initialized.status, 0, initialized.stderr); + assert.match(initialized.stderr, /sunhat toolchain install/u); + assert.equal(existsSync(resolve(temporary, 'download.txt')), false); + assert.ok(existsSync(resolve(root, 'sunhat.toml'))); + assert.equal(existsSync(resolve(root, '.sunhat/toolchain.json')), false); + const failed = run(root, ['toolchain', 'install'], { + preload: true, + env: { + SUNHAT_TEST_DOWNLOAD: 'http-error', + SUNHAT_TEST_DOWNLOAD_LOG: resolve(temporary, 'download.txt'), + }, + }); + assert.equal(failed.status, 3, failed.stderr); + assert.match(failed.stderr, /download failed \(503\)/u); + assert.ok(existsSync(resolve(temporary, 'download.txt'))); + assert.equal(existsSync(resolve(root, '.sunhat/toolchain.json')), false); + const retried = run(root, ['toolchain', 'install']); + assert.equal(retried.status, 0, retried.stderr); + assert.equal( + retried.stderr, + 'verify\nToolchain installed successfully.\n', + ); + const build = run(root, ['build']); + assert.equal(build.status, 0, build.stderr); + assert.equal(build.stdout, '["build"]'); }); - assert.equal(initialized.status, 3, initialized.stderr); - assert.match(initialized.stderr, /archive digest mismatch/u); - assert.match(initialized.stderr, /retry with `sunhat toolchain install`/u); - assert.ok(existsSync(resolve(root, 'sunhat.toml'))); - assert.equal(existsSync(resolve(root, '.sunhat/toolchain.json')), false); - const retried = run(root, ['toolchain', 'install']); - assert.equal(retried.status, 0, retried.stderr); - const build = run(root, ['build']); - assert.equal(build.status, 0, build.stderr); - assert.equal(build.stdout, '["build"]'); - }); + } test(`init foundry/${target}: toolchain install download failures`, async (t) => { const initialized = project(t, 'foundry', target); - rmSync(resolve(initialized.root, '.sunhat'), { - recursive: true, - force: true, - }); await t.test('info/build report a missing toolchain', () => { for (const args of [['toolchain', 'info'], ['build']]) { const result = run(initialized.nested, args); diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js index f9476c1..cb09d41 100644 --- a/test/init-template-assets.test.js +++ b/test/init-template-assets.test.js @@ -16,11 +16,6 @@ import { tmpdir } from 'node:os'; import { basename, dirname, relative, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; -import { - configureFoundryTemplates, - foundryInitArgs, - foundryInitEnv, -} from './fixtures/foundry-init.js'; import { copyCliRuntime } from './fixtures/runtime.js'; import { initProject } from '../dist/cli/init.js'; import { CliError } from '../dist/errors.js'; @@ -42,7 +37,6 @@ function runtime(t) { process.platform === 'win32' ? 'package with spaces' : 'package "quoted"', ); const fixture = copyCliRuntime(packageRoot); - configureFoundryTemplates(packageRoot); return { temporary, ...fixture }; } @@ -52,19 +46,11 @@ function json(path, value) { } function run(fixture, args) { - return spawnSync( - process.execPath, - [...foundryInitArgs, fixture.cli, 'init', ...args], - { - cwd: fixture.temporary, - encoding: 'utf8', - timeout: 10_000, - env: { - ...process.env, - ...foundryInitEnv, - }, - }, - ); + return spawnSync(process.execPath, [fixture.cli, 'init', ...args], { + cwd: fixture.temporary, + encoding: 'utf8', + timeout: 10_000, + }); } test('scaffold plans accept relative paths and can be inspected before creating project directories', (t) => { @@ -210,12 +196,8 @@ for (const framework of ['hardhat', 'foundry']) { JSON.parse(readFileSync(resolve(project, 'foundry-toolchain.json'))), toolchain, ); - const installed = JSON.parse( - readFileSync(resolve(project, '.sunhat/toolchain.json')), - ); - assert.equal(installed.release, 'template-release'); - assert.equal(installed.revision, 'template-revision'); } + assert.equal(existsSync(resolve(project, '.sunhat')), false); assert.equal( readFileSync(resolve(project, native), 'utf8'), customizedConfig, diff --git a/test/package.test.js b/test/package.test.js index 017c679..d6483d0 100644 --- a/test/package.test.js +++ b/test/package.test.js @@ -18,11 +18,15 @@ import test from 'node:test'; import { parse } from 'smol-toml'; import { configureFoundryTemplates, - foundryInitArgs, - foundryInitEnv, -} from './fixtures/foundry-init.js'; + foundryInstallArgs, + foundryInstallEnv, +} from './fixtures/foundry-install.js'; const repository = fileURLToPath(new URL('../', import.meta.url)); +const offlineDownload = new URL( + './fixtures/toolchain-download.js', + import.meta.url, +).href; const metadata = JSON.parse( readFileSync(resolve(repository, 'package.json'), 'utf8'), ); @@ -147,13 +151,18 @@ test( configureFoundryTemplates(installed); for (const framework of ['foundry', 'hardhat']) { for (const target of ['evm', 'tron']) { + const project = resolve(consumer, `${framework}-${target}`); await t.test( - `${framework}/${target} initializes from the installed templates`, + `${framework}/${target} initializes offline from the installed templates`, () => { - const project = resolve(consumer, `${framework}-${target}`); - run( + const downloadLog = resolve( + temporary, + `${framework}-${target}-init-download.txt`, + ); + const initialized = run( [ - ...(framework === 'foundry' ? foundryInitArgs : []), + '--import', + offlineDownload, cli, 'init', '--framework', @@ -164,9 +173,17 @@ test( ], consumer, { - env: foundryInitEnv, + env: { + SUNHAT_TEST_DOWNLOAD: 'http-error', + SUNHAT_TEST_DOWNLOAD_LOG: downloadLog, + }, }, ); + assert.equal(existsSync(downloadLog), false); + assert.equal(existsSync(resolve(project, '.sunhat')), false); + if (framework === 'foundry') { + assert.match(initialized.stderr, /sunhat toolchain install/u); + } const manifest = JSON.parse( readFileSync(resolve(project, 'package.json'), 'utf8'), ); @@ -200,7 +217,19 @@ test( for (const path of paths) { assert.ok(existsSync(resolve(project, path)), `missing ${path}`); } - if (framework === 'foundry') { + }, + ); + if (framework === 'foundry') { + await t.test( + `${framework}/${target} installs its toolchain explicitly`, + () => { + run( + [...foundryInstallArgs, cli, 'toolchain', 'install'], + project, + { + env: foundryInstallEnv, + }, + ); const lock = JSON.parse( readFileSync( resolve(project, '.sunhat/toolchain.json'), @@ -217,9 +246,9 @@ test( for (const binary of Object.values(lock.binaries)) { assert.ok(existsSync(resolve(project, binary.path))); } - } - }, - ); + }, + ); + } } } }, diff --git a/test/template-types.test.js b/test/template-types.test.js index 6ab6f52..e9f17b1 100644 --- a/test/template-types.test.js +++ b/test/template-types.test.js @@ -23,13 +23,14 @@ function run(args, cwd, timeout = 10_000) { .filter(Boolean) .join('\n'), ); + return result; } for (const target of ['evm', 'tron']) { test( `Hardhat ${target} template passes tsc --noEmit with its declared dependencies`, { timeout: 180_000 }, - (t) => { + async (t) => { assert.ok( process.env.npm_execpath, 'Run this integration suite with npm run test:templates', @@ -68,6 +69,34 @@ for (const target of ['evm', 'tron']) { project, 30_000, ); + if (target === 'tron') { + await t.test( + 'the default test task never starts or stops Docker', + () => { + const program = ` + const assert = require('node:assert/strict'); + const { basename } = require('node:path'); + const childProcess = require('node:child_process'); + for (const method of ['spawn', 'spawnSync']) { + const original = childProcess[method]; + childProcess[method] = (command, ...args) => { + assert.ok(!['docker', 'docker.exe'].includes(basename(String(command))), + 'the default template must not invoke Docker'); + return original(command, ...args); + }; + } + require('ts-node/register'); + const hre = require('hardhat'); + hre.run('test', { noCompile: true, grep: '^$' }).catch((error) => { + process.stderr.write(String(error) + '\\n'); + process.exitCode = 1; + }); + `; + const result = run(['-e', program], project, 30_000); + assert.match(result.stdout, /0 passing/u); + }, + ); + } }, ); } diff --git a/test/toolchain.test.js b/test/toolchain.test.js index 8f1cd4b..ff84a00 100644 --- a/test/toolchain.test.js +++ b/test/toolchain.test.js @@ -1,5 +1,6 @@ import assert from 'node:assert/strict'; -import { spawnSync } from 'node:child_process'; +import { execFile, spawnSync } from 'node:child_process'; +import { once } from 'node:events'; import { existsSync, mkdirSync, @@ -13,6 +14,7 @@ import { writeFileSync, } from 'node:fs'; import { tmpdir } from 'node:os'; +import { createServer } from 'node:http'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; @@ -175,24 +177,10 @@ function installFixture(t, target, directory = tmpdir()) { writeArchive(fixture); const initialized = spawnSync( process.execPath, - [ - '--import', - download, - cli, - 'init', - '--adopt', - '--target', - target, - fixture.root, - ], + [cli, 'init', '--adopt', '--target', target, fixture.root], { encoding: 'utf8', timeout: 30_000, - env: { - ...process.env, - SUNHAT_TEST_ARCHIVE: fixture.archive, - SUNHAT_TEST_DOWNLOAD_LOG: fixture.log, - }, }, ); assert.equal( @@ -200,6 +188,9 @@ function installFixture(t, target, directory = tmpdir()) { 0, initialized.stderr || String(initialized.error ?? ''), ); + assert.equal(existsSync(fixture.log), false); + assert.equal(existsSync(resolve(fixture.root, '.sunhat')), false); + assertInstalled(install(fixture)); return fixture; } @@ -273,21 +264,134 @@ function assertClean(root, target) { assert.deepEqual(readdirSync(resolve(root, '.sunhat/toolchains')), [target]); } -test('the installer accepts a download dependency while using native archive extraction', async (t) => { +test('network downloads allow active transfers and exit on failure', async (t) => { + const fixture = installFixture(t, 'evm'); + const previous = snapshot(fixture.root); + const archive = readFileSync(fixture.archive); + const moduleUrl = new URL('../dist/toolchain/install.js', import.meta.url) + .href; + const scenarios = [ + { + name: 'active download can exceed the idle timeout with concise output', + timeoutMs: 1_500, + respond: (_request, response) => { + response.writeHead(200, { 'Content-Length': archive.length }); + const chunkSize = Math.ceil(archive.length / 5); + let offset = chunkSize; + response.write(archive.subarray(0, offset)); + const timer = setInterval(() => { + response.write(archive.subarray(offset, offset + chunkSize)); + offset += chunkSize; + if (offset >= archive.length) { + clearInterval(timer); + response.end(); + } + }, 500); + response.once('close', () => clearInterval(timer)); + }, + }, + { + name: 'stalled response headers time out', + timeoutMs: 1_000, + respond: () => {}, + error: /download timed out/u, + }, + { + name: 'stalled response body times out', + timeoutMs: 1_000, + respond: (_request, response) => { + response.writeHead(200, { 'Content-Length': archive.length }); + response.write(archive.subarray(0, 1)); + }, + error: /download timed out/u, + }, + { + name: 'HTTP failure cancels an unfinished response body', + timeoutMs: 5_000, + respond: (_request, response) => { + response.writeHead(503); + response.write('unavailable'); + }, + error: /download failed \(503\)/u, + }, + { + name: 'connection failure reports its cause', + timeoutMs: 5_000, + respond: (request) => request.socket.destroy(), + error: /download failed: fetch failed/su, + }, + ]; + for (const scenario of scenarios) { + await t.test(scenario.name, async (t) => { + const server = createServer(scenario.respond); + server.listen(0, '127.0.0.1'); + await once(server, 'listening'); + t.after(() => { + server.closeAllConnections(); + return new Promise((resolve) => server.close(resolve)); + }); + const program = ` + import { installFoundry } from ${JSON.stringify(moduleUrl)}; + try { + await installFoundry(${JSON.stringify(fixture.root)}, 'evm', { + downloadIdleTimeoutMs: ${scenario.timeoutMs}, + }); + } catch (error) { + process.stderr.write(error.message + '\\n'); + process.exitCode = error.exitCode ?? 6; + } + `; + const result = await new Promise((resolve) => { + execFile( + process.execPath, + ['--import', download, '--input-type=module', '-e', program], + { + cwd: fixture.root, + encoding: 'utf8', + timeout: 10_000, + env: { + ...process.env, + SUNHAT_TEST_DOWNLOAD_URL: `http://127.0.0.1:${server.address().port}`, + }, + }, + (error, stdout, stderr) => resolve({ error, stdout, stderr }), + ); + }); + assert.match(result.stderr, /^verify\n/u); + assert.doesNotMatch(result.stderr, /https?:\/\/|v1\.8\.6|foundry-rs/u); + if (scenario.error) { + assert.equal(result.error?.code, 3, result.stderr); + assert.equal(result.error.killed, false); + assert.match(result.stderr, scenario.error); + } else { + assert.ifError(result.error); + assert.equal(result.stdout, ''); + assert.equal( + result.stderr, + 'verify\nToolchain installed successfully.\n', + ); + } + assertPreserved(fixture.root, previous); + assertClean(fixture.root, 'evm'); + }); + } +}); + +test('the installer downloads only the selected host archive and uses native extraction', async (t) => { const fixture = installFixture(t, 'evm'); const previous = snapshot(fixture.root); writeArchive(fixture, { label: 'service replacement' }); - let requested; + const requested = []; assert.equal( await installFoundry(fixture.root, 'evm', { download: async (url) => { - requested = url; + requested.push(url); return readFileSync(fixture.archive); }, }), 0, ); - assert.equal(requested, readFileSync(fixture.log, 'utf8')); + assert.deepEqual(requested, [readFileSync(fixture.log, 'utf8')]); const installed = snapshot(fixture.root); for (const [path, bytes] of Object.entries(installed.binaries)) { assert.notDeepEqual(bytes, previous.binaries[path]); From 70bb4937ff0f719b28ed4ca9d1312c9654ae3df5 Mon Sep 17 00:00:00 2001 From: grayfoxd <11747539+grayfoxd@users.noreply.github.com> Date: Wed, 28 Oct 2026 17:26:02 +0800 Subject: [PATCH 24/24] refactor: tighten CLI types and toolchain path handling Share executable validation across adapters and preserve dangling configuration entries during discovery. Make project initialization synchronous and constrain runtime configuration types. Add regression coverage for invalid executables, internal symlinks, filesystem-root scopes, and dangling configuration files. --- src/adapters/executable.ts | 38 ++++++++++++++ src/adapters/foundry.ts | 12 +---- src/adapters/hardhat.ts | 11 ++-- src/cli/init.ts | 10 ++-- src/cli/parser.ts | 12 +++-- src/project/binding.ts | 4 +- src/project/root.ts | 4 +- src/toolchain/install.ts | 9 ++-- src/toolchain/lock.ts | 16 +++--- src/toolchain/releases.ts | 16 +++--- test/binding.test.js | 35 ++++++++++++- test/init-commands.test.js | 2 +- test/init-template-assets.test.js | 12 ++--- test/json-boundaries.test.js | 84 ++++++++++++++++++++++++++++++- 14 files changed, 207 insertions(+), 58 deletions(-) create mode 100644 src/adapters/executable.ts diff --git a/src/adapters/executable.ts b/src/adapters/executable.ts new file mode 100644 index 0000000..c03f448 --- /dev/null +++ b/src/adapters/executable.ts @@ -0,0 +1,38 @@ +import { realpathSync, statSync } from 'node:fs'; +import { isAbsolute, relative, resolve, sep } from 'node:path'; +import { errorMessage, toolchainError } from '../errors.js'; + +export function resolveExecutable( + root: string, + entry: string, + tool: string, +): string { + const path = resolve(root, entry); + let directory: string; + let executable: string; + let isFile: boolean; + try { + directory = realpathSync(root); + executable = realpathSync(path); + isFile = statSync(executable).isFile(); + } catch (error) { + return toolchainError( + `cannot resolve ${tool} executable ${path}: ${errorMessage(error)}`, + { cause: error }, + ); + } + const location = relative(directory, executable); + if ( + location === '..' || + location.startsWith(`..${sep}`) || + isAbsolute(location) + ) { + return toolchainError( + `${tool} executable ${path} escapes ${directory}: ${executable}`, + ); + } + if (!isFile) { + return toolchainError(`${tool} executable is not a file: ${path}`); + } + return executable; +} diff --git a/src/adapters/foundry.ts b/src/adapters/foundry.ts index 09fb03a..f6b8024 100644 --- a/src/adapters/foundry.ts +++ b/src/adapters/foundry.ts @@ -1,10 +1,9 @@ -import { realpathSync } from 'node:fs'; -import { resolve, sep } from 'node:path'; import { toolchainError } from '../errors.js'; import type { Target } from '../project/binding.js'; import { spawnNative } from '../process.js'; import { loadToolchain } from '../toolchain/lock.js'; import type { FoundryTool } from '../toolchain/lock.js'; +import { resolveExecutable } from './executable.js'; export async function runFoundry( root: string, @@ -17,13 +16,6 @@ export async function runFoundry( if (!binary) { return toolchainError(`locked toolchain does not provide ${tool}`); } - const projectRoot = realpathSync(root); - const executable = realpathSync(resolve(projectRoot, binary.path)); - if ( - executable !== projectRoot && - !executable.startsWith(`${projectRoot}${sep}`) - ) { - return toolchainError(`${tool} path escapes the project root`); - } + const executable = resolveExecutable(root, binary.path, tool); return await spawnNative(executable, args, root); } diff --git a/src/adapters/hardhat.ts b/src/adapters/hardhat.ts index 58d89cf..6429e69 100644 --- a/src/adapters/hardhat.ts +++ b/src/adapters/hardhat.ts @@ -1,9 +1,10 @@ +import { existsSync } from 'node:fs'; import { createRequire } from 'node:module'; -import { dirname, isAbsolute, resolve, sep } from 'node:path'; -import { existsSync, realpathSync } from 'node:fs'; +import { dirname, isAbsolute, resolve } from 'node:path'; import { errorMessage, hasErrorCode, toolchainError } from '../errors.js'; import { spawnNative } from '../process.js'; import { isRecord, readJson } from '../json.js'; +import { resolveExecutable } from './executable.js'; interface PackageJson { version?: string; @@ -74,11 +75,7 @@ export async function runHardhat( if (isAbsolute(relative)) { return toolchainError('Hardhat bin must be package-relative'); } - const packageRoot = realpathSync(dirname(manifestPath)); - const entry = realpathSync(resolve(packageRoot, relative)); - if (entry !== packageRoot && !entry.startsWith(`${packageRoot}${sep}`)) { - return toolchainError('Hardhat bin escapes package root'); - } + const entry = resolveExecutable(dirname(manifestPath), relative, 'Hardhat'); return await spawnNative(process.execPath, [entry, ...args], root); } diff --git a/src/cli/init.ts b/src/cli/init.ts index a89156b..2401717 100644 --- a/src/cli/init.ts +++ b/src/cli/init.ts @@ -7,13 +7,13 @@ import { planAdoption, planScaffold } from '../scaffold/plan.js'; import { parseTarget } from './parser.js'; interface InitOptions { - framework: Framework; - target: Target; - path: string; - adopt: boolean; + readonly framework: Framework; + readonly target: Target; + readonly path: string; + readonly adopt: boolean; } -export async function initProject(argv: readonly string[]): Promise { +export function initProject(argv: readonly string[]): number { const options = parseInitOptions(argv); if (!options) { process.stdout.write( diff --git a/src/cli/parser.ts b/src/cli/parser.ts index 1463cee..26ee222 100644 --- a/src/cli/parser.ts +++ b/src/cli/parser.ts @@ -2,10 +2,14 @@ import { usage } from '../errors.js'; import type { Target } from '../project/binding.js'; export type Invocation = - | { kind: 'help' } - | { kind: 'version' } - | { kind: 'init'; args: string[] } - | { kind: 'run'; command: string; args: string[] }; + | { readonly kind: 'help' } + | { readonly kind: 'version' } + | { readonly kind: 'init'; readonly args: readonly string[] } + | { + readonly kind: 'run'; + readonly command: string; + readonly args: readonly string[]; + }; export function parse(argv: readonly string[]): Invocation { if ( diff --git a/src/project/binding.ts b/src/project/binding.ts index f096f7a..1b2fe66 100644 --- a/src/project/binding.ts +++ b/src/project/binding.ts @@ -6,8 +6,8 @@ export type Framework = 'hardhat' | 'foundry'; export type Target = 'tron' | 'evm'; export interface Binding { - framework: Framework; - target: Target; + readonly framework: Framework; + readonly target: Target; } export function readBinding(path: string): Binding { diff --git a/src/project/root.ts b/src/project/root.ts index e4a911f..b990cc9 100644 --- a/src/project/root.ts +++ b/src/project/root.ts @@ -1,4 +1,4 @@ -import { existsSync } from 'node:fs'; +import { lstatSync } from 'node:fs'; import { dirname, parse, resolve } from 'node:path'; import { CliError } from '../errors.js'; @@ -6,7 +6,7 @@ export function findProjectRoot(start: string): string { let current = resolve(start); const filesystemRoot = parse(current).root; for (;;) { - if (existsSync(resolve(current, 'sunhat.toml'))) { + if (lstatSync(resolve(current, 'sunhat.toml'), { throwIfNoEntry: false })) { return current; } if (current === filesystemRoot) { diff --git a/src/toolchain/install.ts b/src/toolchain/install.ts index 918a528..047d28d 100644 --- a/src/toolchain/install.ts +++ b/src/toolchain/install.ts @@ -17,14 +17,15 @@ import { toolchainError, } from '../errors.js'; import type { Target } from '../project/binding.js'; +import type { ToolchainLock } from './lock.js'; import { platformKey, releaseFor, releaseUrl } from './releases.js'; const execFileAsync = promisify(execFile); interface InstallOptions { - download?: (url: string) => Promise; - extract?: (archive: string, destination: string) => Promise; - downloadIdleTimeoutMs?: number; + readonly download?: (url: string) => Promise; + readonly extract?: (archive: string, destination: string) => Promise; + readonly downloadIdleTimeoutMs?: number; } export async function installFoundry( @@ -78,7 +79,7 @@ export async function installFoundry( revision: release.revision, platform: platformKey(), binaries, - }; + } satisfies ToolchainLock; // The lock may live on a different mount from toolchains; stage beside it too. lockTemporary = mkdtempSync(resolve(root, '.sunhat/.toolchain-lock-')); const preparedLock = resolve(lockTemporary, 'toolchain.json'); diff --git a/src/toolchain/lock.ts b/src/toolchain/lock.ts index 2958a7f..1ac9cbe 100644 --- a/src/toolchain/lock.ts +++ b/src/toolchain/lock.ts @@ -6,13 +6,15 @@ import { isRecord, readJson } from '../json.js'; export type FoundryTool = 'forge' | 'cast' | 'anvil' | 'chisel'; export interface ToolchainLock { - version: number; - target: Target; - source: string; - release: string; - revision: string; - platform: string; - binaries: Partial>; + readonly version: 1 | 2; + readonly target: Target; + readonly source: string; + readonly release: string; + readonly revision: string; + readonly platform: string; + readonly binaries: Readonly< + Partial> + >; } export function loadToolchain(root: string, target: Target): ToolchainLock { diff --git a/src/toolchain/releases.ts b/src/toolchain/releases.ts index e415463..e941288 100644 --- a/src/toolchain/releases.ts +++ b/src/toolchain/releases.ts @@ -1,4 +1,4 @@ -import { existsSync } from 'node:fs'; +import { lstatSync } from 'node:fs'; import { basename, resolve } from 'node:path'; import type { Target } from '../project/binding.js'; import { toolchainError } from '../errors.js'; @@ -7,12 +7,12 @@ import { isRecord, readJson } from '../json.js'; import type { FoundryTool } from './lock.js'; export interface Release { - source: string; - release: string; - revision: string; - archive: string; - sha256: string; - tools: Record; + readonly source: string; + readonly release: string; + readonly revision: string; + readonly archive: string; + readonly sha256: string; + readonly tools: Readonly>; } export function platformKey(): string { @@ -22,7 +22,7 @@ export function platformKey(): string { export function releaseFor(target: Target, root?: string): Release { const local = root ? resolve(root, 'foundry-toolchain.json') : undefined; const path = - local && existsSync(local) + local && lstatSync(local, { throwIfNoEntry: false }) ? local : resolve( packageRoot, diff --git a/test/binding.test.js b/test/binding.test.js index 5f41d80..4c8af50 100644 --- a/test/binding.test.js +++ b/test/binding.test.js @@ -1,10 +1,18 @@ import assert from 'node:assert/strict'; -import { mkdtempSync, rmSync, writeFileSync } from 'node:fs'; +import { + mkdirSync, + mkdtempSync, + realpathSync, + rmSync, + symlinkSync, + writeFileSync, +} from 'node:fs'; import { tmpdir } from 'node:os'; import { resolve } from 'node:path'; import test from 'node:test'; import { CliError } from '../dist/errors.js'; import { readBinding, validateBinding } from '../dist/project/binding.js'; +import { findProjectRoot } from '../dist/project/root.js'; test('Binding validation accepts plain parsed values without a TOML parser', () => { for (const framework of ['hardhat', 'foundry']) { @@ -167,3 +175,28 @@ test('binding read errors retain their path and exit code', (t) => { }, ); }); + +test('project discovery stops at a dangling binding instead of using the parent project', (t) => { + const parentBinding = fixture(t); + const parent = realpathSync(resolve(parentBinding, '..')); + writeFileSync( + parentBinding, + '[project]\nframework = "hardhat"\ntarget = "evm"\n', + ); + const project = resolve(parent, 'nested-project'); + const child = resolve(project, 'src'); + mkdirSync(child, { recursive: true }); + const binding = resolve(project, 'sunhat.toml'); + symlinkSync(resolve(parent, 'missing-binding'), binding, 'file'); + + assert.equal(findProjectRoot(child), project); + assert.throws( + () => readBinding(binding), + (error) => { + assert.equal(error.exitCode, 4); + assert.equal(error.cause.code, 'ENOENT'); + assert.ok(error.message.includes(binding)); + return true; + }, + ); +}); diff --git a/test/init-commands.test.js b/test/init-commands.test.js index 0c32e54..67d153a 100644 --- a/test/init-commands.test.js +++ b/test/init-commands.test.js @@ -51,7 +51,7 @@ for (const flag of ['--help', '-h']) { const moduleUrl = new URL('../dist/cli/init.js', import.meta.url).href; const program = ` import { initProject } from ${JSON.stringify(moduleUrl)}; - const status = await initProject(${JSON.stringify([flag, destination])}); + const status = initProject(${JSON.stringify([flag, destination])}); process.stdout.write('returned:' + status + '\\n'); `; const result = spawnSync( diff --git a/test/init-template-assets.test.js b/test/init-template-assets.test.js index cb09d41..199f2f0 100644 --- a/test/init-template-assets.test.js +++ b/test/init-template-assets.test.js @@ -359,7 +359,7 @@ test('initialization preserves existing directory symlinks and rejects dangling }); for (const code of ['EACCES', 'ENOSPC', 'EIO']) { - test(`initialization preserves ${code} write failures instead of reporting a conflict`, async (t) => { + test(`initialization preserves ${code} write failures instead of reporting a conflict`, (t) => { const root = realpathSync( mkdtempSync(resolve(tmpdir(), 'sunhat-write-error-')), ); @@ -378,8 +378,8 @@ for (const code of ['EACCES', 'ENOSPC', 'EIO']) { }; syncBuiltinESMExports(); try { - await assert.rejects( - initProject(['--framework', 'hardhat', '--target', 'evm', root]), + assert.throws( + () => initProject(['--framework', 'hardhat', '--target', 'evm', root]), (error) => { assert.ok(error instanceof CliError); assert.equal(error.exitCode, 6); @@ -399,7 +399,7 @@ for (const code of ['EACCES', 'ENOSPC', 'EIO']) { }); } -test('a file created after preflight remains protected by exclusive creation', async (t) => { +test('a file created after preflight remains protected by exclusive creation', (t) => { const root = realpathSync( mkdtempSync(resolve(tmpdir(), 'sunhat-write-race-')), ); @@ -414,8 +414,8 @@ test('a file created after preflight remains protected by exclusive creation', a }; syncBuiltinESMExports(); try { - await assert.rejects( - initProject(['--framework', 'hardhat', '--target', 'evm', root]), + assert.throws( + () => initProject(['--framework', 'hardhat', '--target', 'evm', root]), (error) => { assert.ok(error instanceof CliError); assert.equal(error.exitCode, 2); diff --git a/test/json-boundaries.test.js b/test/json-boundaries.test.js index 085e24e..06d1d66 100644 --- a/test/json-boundaries.test.js +++ b/test/json-boundaries.test.js @@ -6,12 +6,15 @@ import { readFileSync, realpathSync, rmSync, + symlinkSync, writeFileSync, } from 'node:fs'; import { tmpdir } from 'node:os'; -import { dirname, resolve } from 'node:path'; +import { dirname, parse, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import test from 'node:test'; +import { resolveExecutable } from '../dist/adapters/executable.js'; +import { CliError } from '../dist/errors.js'; import { platformKey, releaseFor } from '../dist/toolchain/releases.js'; const cli = fileURLToPath(new URL('../bin/sunhat.js', import.meta.url)); @@ -157,6 +160,85 @@ test('Hardhat accepts valid dependency maps and a string bin entry', (t) => { assert.equal(result.stdout, '["compile","--force"]'); }); +for (const framework of ['hardhat', 'foundry']) { + for (const kind of [ + 'missing', + 'directory', + 'dangling-link', + 'outside-link', + ]) { + test(`${framework} reports an invalid ${kind} executable as a toolchain error`, (t) => { + const context = + framework === 'hardhat' ? hardhat(t) : { root: fixture(t, 'foundry') }; + const executable = + framework === 'hardhat' + ? resolve(context.root, 'node_modules/hardhat/cli.js') + : resolve(context.root, '.sunhat/forge'); + if (framework === 'foundry') { + json(resolve(context.root, '.sunhat/toolchain.json'), lock()); + } else { + rmSync(executable); + } + if (kind === 'directory') { + mkdirSync(executable); + } else if (kind.endsWith('-link')) { + const storage = mkdtempSync(resolve(tmpdir(), 'sunhat-outside-')); + t.after(() => rmSync(storage, { recursive: true, force: true })); + const destination = resolve(storage, 'cli.js'); + if (kind === 'outside-link') { + writeFileSync(destination, 'throw new Error("must not run");'); + } + symlinkSync(destination, executable, 'file'); + } + const result = run(context.root, [ + framework === 'hardhat' ? 'compile' : 'build', + ]); + assertInvalid(result, executable); + assert.match(result.stderr, /executable/u); + }); + } +} + +test('a dangling project toolchain configuration is reported instead of using template defaults', (t) => { + const root = fixture(t, 'foundry'); + const path = resolve(root, 'foundry-toolchain.json'); + symlinkSync(resolve(root, 'missing-toolchain.json'), path, 'file'); + assert.throws( + () => releaseFor('evm', root), + (error) => { + assert.equal(error.exitCode, 3); + assert.equal(error.cause.code, 'ENOENT'); + assert.ok(error.message.includes(path)); + return true; + }, + ); +}); + +test('executable resolution accepts internal links and a filesystem-root scope, and retains read errors', (t) => { + const root = fixture(t, 'foundry'); + const executable = resolve(root, 'cli.js'); + writeFileSync(executable, 'fixture executable'); + const link = resolve(root, 'linked-cli.js'); + symlinkSync(executable, link, 'file'); + assert.equal(resolveExecutable(root, 'linked-cli.js', 'fixture'), executable); + assert.equal( + resolveExecutable(parse(root).root, executable, 'fixture'), + executable, + ); + + const missing = resolve(root, 'missing-cli.js'); + assert.throws( + () => resolveExecutable(root, missing, 'fixture'), + (error) => { + assert.ok(error instanceof CliError); + assert.equal(error.exitCode, 3); + assert.equal(error.cause.code, 'ENOENT'); + assert.ok(error.message.includes(missing)); + return true; + }, + ); +}); + for (const [name, modify] of [ [ 'null platforms',